addCourse.vue 260 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551755275537554755575567557755875597560756175627563756475657566756775687569757075717572757375747575757675777578757975807581758275837584758575867587758875897590759175927593759475957596759775987599760076017602760376047605760676077608760976107611761276137614761576167617761876197620762176227623762476257626762776287629763076317632763376347635763676377638763976407641764276437644764576467647764876497650765176527653765476557656765776587659766076617662766376647665766676677668766976707671767276737674767576767677767876797680768176827683768476857686768776887689769076917692769376947695769676977698769977007701770277037704770577067707770877097710771177127713771477157716771777187719772077217722772377247725772677277728772977307731773277337734773577367737773877397740774177427743774477457746774777487749775077517752775377547755775677577758775977607761776277637764776577667767776877697770777177727773777477757776777777787779778077817782778377847785778677877788778977907791779277937794779577967797779877997800780178027803780478057806780778087809781078117812781378147815781678177818781978207821782278237824782578267827782878297830783178327833783478357836783778387839784078417842784378447845784678477848784978507851785278537854785578567857785878597860786178627863786478657866786778687869787078717872787378747875787678777878787978807881788278837884788578867887788878897890789178927893789478957896789778987899790079017902790379047905790679077908790979107911791279137914791579167917791879197920792179227923792479257926792779287929793079317932793379347935793679377938793979407941794279437944794579467947794879497950795179527953795479557956795779587959796079617962796379647965796679677968796979707971797279737974797579767977797879797980798179827983798479857986798779887989799079917992799379947995799679977998799980008001800280038004800580068007800880098010801180128013801480158016801780188019802080218022802380248025802680278028802980308031803280338034803580368037803880398040804180428043804480458046804780488049805080518052805380548055805680578058805980608061806280638064806580668067806880698070807180728073807480758076807780788079808080818082808380848085808680878088808980908091809280938094809580968097809880998100810181028103810481058106810781088109811081118112811381148115811681178118811981208121812281238124812581268127812881298130813181328133813481358136813781388139814081418142814381448145814681478148814981508151815281538154815581568157815881598160816181628163816481658166816781688169817081718172817381748175817681778178817981808181818281838184818581868187818881898190819181928193819481958196819781988199820082018202820382048205820682078208820982108211821282138214821582168217821882198220822182228223822482258226822782288229823082318232823382348235823682378238823982408241824282438244824582468247824882498250825182528253825482558256825782588259826082618262826382648265826682678268826982708271827282738274827582768277827882798280
  1. <template>
  2. <div class="pb_content">
  3. <div class="pb_content_body" style="position: relative; margin: 0">
  4. <div class="right">
  5. <div class="stepBg">
  6. <div class="stepTop">
  7. <div v-if="steps == 1" class="first" @click="navSteps(1)">
  8. <div>
  9. <img src="../../assets/icon/first.png" alt />
  10. </div>
  11. <div>填写基本信息</div>
  12. </div>
  13. <div v-else class="firstNo" @click="navSteps(1)">
  14. <div>
  15. <img src="../../assets/icon/firstNo.png" alt />
  16. </div>
  17. <div>填写基本信息</div>
  18. </div>
  19. <div v-show="cidType === 0" class="secondNo">
  20. <div v-if="steps == 2" class="newSteps second" @click="navSteps(2)">
  21. <div style="margin: 5px 10px 0 0; width: 2rem">
  22. <img src="../../assets/icon/second.png" alt />
  23. </div>
  24. <div>选择项目框架</div>
  25. </div>
  26. <div v-else class="newSteps secondNo" @click="navSteps(2)">
  27. <div>
  28. <img src="../../assets/icon/secondNo.png" alt />
  29. </div>
  30. <div>选择项目框架</div>
  31. </div>
  32. </div>
  33. <div v-if="steps == 3" class="third" @click="navSteps(3)">
  34. <div>
  35. <img src="../../assets/icon/third.png" alt />
  36. </div>
  37. <div>上传项目内容</div>
  38. </div>
  39. <div v-else class="thirdNo" @click="navSteps(3)">
  40. <div>
  41. <img src="../../assets/icon/thirdNo.png" alt />
  42. </div>
  43. <div>上传项目内容</div>
  44. </div>
  45. <div v-if="steps == 4" class="four">
  46. <div>
  47. <img src="../../assets/icon/four.png" alt />
  48. </div>
  49. <div>上传完成</div>
  50. </div>
  51. <div v-else class="fourNo">
  52. <div>
  53. <img src="../../assets/icon/fourNo.png" alt />
  54. </div>
  55. <div>上传完成</div>
  56. </div>
  57. </div>
  58. <div class="stepsBottom" v-if="steps == 3">
  59. <div class="navTop">辅助导航</div>
  60. <div class="navBottom">
  61. <div class="navTask" :class="{
  62. isNavTask: isClickColor > 0 && isClickColor == tIndex + 1,
  63. }" v-for="(t, tIndex) in unitJson[unitIndex].chapterInfo[0]
  64. .taskJson" :key="tIndex" @click="goToTask(tIndex)">
  65. <div>任务{{ tIndex + 1 }}</div>
  66. <el-tooltip effect="light" :content="t.task" placement="top">
  67. <div>{{ t.task }}</div>
  68. </el-tooltip>
  69. </div>
  70. </div>
  71. </div>
  72. </div>
  73. <!-- <div style="display: flex; margin-top: 20px; position: relative"> -->
  74. <div style="width: 100%; height: 100%; overflow: auto" ref="stepBox">
  75. <div class="courseTop">
  76. <div class="stepsNav">
  77. <h3 class="info_title" v-if="steps == 1">项目内容填写</h3>
  78. <h3 class="info_title" v-if="steps == 2">请选择项目框架</h3>
  79. <h3 class="info_title" v-if="steps == 3">项目内容填写</h3>
  80. <h3 class="info_title" v-if="steps == 4">上传项目</h3>
  81. <el-breadcrumb separator-class="el-icon-arrow-right" style="margin-top: 15px">
  82. <el-breadcrumb-item :to="{
  83. path:
  84. '/course?userid=' +
  85. userid +
  86. '&oid=' +
  87. oid +
  88. '&org=' +
  89. org,
  90. }">项目管理</el-breadcrumb-item>
  91. <el-breadcrumb-item>
  92. <span style="color: rgb(15, 126, 255)">添加项目</span>
  93. </el-breadcrumb-item>
  94. </el-breadcrumb>
  95. </div>
  96. <div v-if="steps == 1 || steps == 2 || steps == 3" class="stepsWord">
  97. {{
  98. steps == 1
  99. ? "第一步"
  100. : steps == 2
  101. ? "第二步"
  102. : steps == 3
  103. ? cidType === 0
  104. ? "第三步"
  105. : "第二步"
  106. : ""
  107. }}
  108. </div>
  109. </div>
  110. <div class="rightBox" v-if="this.steps == 1" @mousewheel="scrollChange">
  111. <div class="updateMask" :style="{ height: rightBoxHeight ? rightBoxHeight + 'px' : '100%' }"
  112. v-if="cid && userid != courseUserid"></div>
  113. <div class="whiteBg">
  114. <div class="right_title" :class="{ updateTips: cid && userid != courseUserid }">
  115. 项目基本信息
  116. </div>
  117. <div class="basic_box">
  118. <div class="big_box">
  119. <div class="left_first">
  120. <div>
  121. <div>
  122. <div class="bInfo_title" style="margin-bottom: 15px">
  123. <!-- <span style="color: red">*</span> -->
  124. 项目名称
  125. </div>
  126. <div style="display: flex; margin-right: 20px">
  127. <img src="../../assets/icon/projectName.png" alt style="margin-right: 8px" />
  128. <input type="text" placeholder="请输入项目名称" class="binfo_input" v-model="courseName" />
  129. </div>
  130. </div>
  131. <div class="both">
  132. <div class="choose">
  133. <div class="all_choose" v-for="(item, index) in CourseType[0]" :key="index">
  134. <span>{{ item.name }}</span>
  135. <el-checkbox-group v-model="courseTypeId" v-if="CourseTypeJson[item.id].length > 0">
  136. <el-checkbox v-for="item1 in CourseTypeJson[item.id]" :key="item1.id" :label="item1.id">{{
  137. item1.name
  138. }}</el-checkbox>
  139. </el-checkbox-group>
  140. <div v-else style="font-size: 14px; margin-left: -8px">
  141. 暂无
  142. </div>
  143. </div>
  144. </div>
  145. </div>
  146. </div>
  147. </div>
  148. </div>
  149. </div>
  150. </div>
  151. <div class="whiteBg" style="border-radius: 0">
  152. <div class="right_first">
  153. <div class="right_title">上传封面与成员</div>
  154. <div style="
  155. padding: 0 0 50px 20px;
  156. display: flex;
  157. align-items: baseline;
  158. justify-content: flex-start;
  159. margin: 0 auto;
  160. ">
  161. <div>
  162. <div class="bInfo_title" style="margin-top: 0 !important">
  163. 项目封面
  164. </div>
  165. <div class="uploadFm" @click="choosePicVisible = true" v-if="cover.length == 0">
  166. <img src="../../assets/icon/addPoster.png" alt="" />
  167. </div>
  168. <el-upload :class="{ disUoloadSty: noneBtnImg }" class="upCss" action="#" list-type="picture"
  169. v-loading="uploadLoading1" :http-request="beforeUpload1" ref="upload1"
  170. :on-preview="handlePictureCardPreview" :on-remove="handle_remove1" :show-file-list="true"
  171. :file-list="cover" accept="image/*" :limit="1" :on-exceed="onExceed" v-else>
  172. <i class="el-icon-plus"></i>
  173. </el-upload>
  174. </div>
  175. <div style="
  176. display: flex;
  177. flex-flow: row nowrap;
  178. flex-direction: row;
  179. flex-wrap: wrap;
  180. align-items: baseline;
  181. margin: 0 30px;
  182. ">
  183. <!-- <div style="margin: 0 80px">
  184. <div class="bInfo_title">
  185. 选择项目成员
  186. </div>
  187. <div
  188. class="addPeople"
  189. @click="addPP"
  190. v-if="this.checkboxList.length == 0"
  191. >添加成员</div>
  192. <div class="addPeople" @click="addPP" v-else>已添加,点击查看</div>
  193. </div>-->
  194. <div style="margin: 0 30px 0 0;width:150px">
  195. <div class="bInfo_title">添加班级</div>
  196. <div class="addPeople" @click="dialogVisibleClass = true">
  197. 添加班级
  198. </div>
  199. <div v-if="checkboxList2.length"
  200. style="max-width: 100%;word-break: break-all;overflow: hidden;margin-top: 10px;font-size:14px;color:#6e6e6e">
  201. <span :class="{ tcMember: getClassC(tc) }" v-for="(tc, tcIndex) in checkboxList2"
  202. :key="tcIndex">{{
  203. getClassC(tc)
  204. }}</span>
  205. </div>
  206. </div>
  207. <div style="flex: 0.5 1 0%; margin: 0;width:180px" v-if="courseUserid != '' ? courseUserid == userid : true">
  208. <div class="bInfo_title">协同编辑</div>
  209. <div class="addPeople" @click="openMember" style="background: #6b92c9">
  210. 添加协同成员
  211. </div>
  212. <div v-if="checkboxList3.length"
  213. style="max-width: 100%;word-break: break-all;overflow: hidden;margin-top: 10px;font-size:14px;color:#6e6e6e">
  214. <span :class="{ tcMember: getMan2(tc) }" v-for="(tc, tcIndex) in checkboxList3"
  215. :key="tcIndex">{{
  216. getMan2(tc)
  217. }}</span>
  218. </div>
  219. </div>
  220. </div>
  221. </div>
  222. </div>
  223. </div>
  224. <div class="whiteBg" style="border-radius: 0; margin-top: 15px">
  225. <div class="right_title">项目简要描述</div>
  226. <div style="width: 95%; padding: 15px 0px 15px 20px">
  227. <div style="width: 55%">
  228. <textarea rows="8" class="binfo_input" cols v-model="courseText"></textarea>
  229. </div>
  230. </div>
  231. <!-- <div style="width: 95%; margin: 15px auto">
  232. <el-switch
  233. v-model="isTeacherSee"
  234. active-text="允许给其他老师查看"
  235. style="padding-bottom: 30px"
  236. ></el-switch>
  237. </div>-->
  238. <div style="width: 95%; padding: 15px 0px 15px 20px">
  239. <el-switch v-model="isTeacherSee" active-text="是否公开此项目" style="padding-bottom: 30px"></el-switch>
  240. </div>
  241. </div>
  242. <div class="whiteBg" style="border-radius: 0; margin-top: 15px; padding-bottom: 20px">
  243. <div class="right_title">目标管理</div>
  244. <div style="margin: 15px auto; padding: 0 0 0 20px">
  245. <div style="
  246. width: 100%%;
  247. display: flex;
  248. flex-direction: row;
  249. flex-wrap: nowrap;
  250. align-content: center;
  251. align-items: center;
  252. justify-content: space-between;
  253. ">
  254. <div style="
  255. display: flex;
  256. flex-flow: row nowrap;
  257. align-items: flex-start;
  258. width: 100%;
  259. flex-direction: column;
  260. flex-wrap: nowrap;
  261. position: relative;
  262. ">
  263. <!-- <div style="margin-right: 15px; min-width: 120px">
  264. 请选择评价指标
  265. </div>
  266. <div>
  267. <el-select
  268. v-model="evalua"
  269. placeholder="请选择体系"
  270. @change="checkEva"
  271. >
  272. <el-option
  273. v-for="(e, eIndex) in evaJuri"
  274. :key="eIndex"
  275. :label="e.title"
  276. :value="e.id"
  277. ></el-option>
  278. </el-select>
  279. </div> -->
  280. <!-- <div
  281. @click="openT"
  282. class="addPeople"
  283. style="
  284. background: #6b92c9;
  285. margin: 0 0 0 15px;
  286. position: absolute;
  287. right: 23%;
  288. "
  289. >
  290. 前往设置目标管理
  291. </div> -->
  292. <div class="e_box">
  293. <div class="e_card" v-for="(item, index) in evaJuri" :key="index">
  294. <div class="e_card_picture">
  295. <img src="../../assets/e_picture.png" />
  296. </div>
  297. <div class="e_card_name">
  298. <span>{{ item.title }}</span>
  299. </div>
  300. <!-- <div class="e_card_time">
  301. <span>{{ item.time }}</span>
  302. </div> -->
  303. <div class="e_card_btn">
  304. <span @click="checkEva(item.id)">导入</span>
  305. <!-- <span @click="openT">前往设置</span> -->
  306. </div>
  307. </div>
  308. <div class="addEva" @click="openT">
  309. <img src="../../assets/icon/addEva.png" alt="" />
  310. </div>
  311. <div v-if="evaJuri.length === 0" style="margin: 0 auto; color: #6e6e6e">
  312. 暂无数据
  313. </div>
  314. </div>
  315. </div>
  316. </div>
  317. <div v-if="evalua" style="
  318. border: 1px solid #e5e5e5;
  319. width: 95%;
  320. margin-top: 30px;
  321. box-shadow: 3px 1px 15px 3px #e0e0e0;
  322. ">
  323. <div class="e_add_top">
  324. <div class="e_add_title">
  325. <span>当前使用目标管理</span>
  326. <span>{{ eTitle }}</span>
  327. <img src="../../assets/line.png" class="cru_line" style="
  328. width: 125px;
  329. height: 20px;
  330. bottom: -10px;
  331. left: 155px;
  332. " />
  333. <!-- <el-input
  334. v-model="eTitle"
  335. placeholder="请输入名称"
  336. @change="setMindData"
  337. ></el-input>-->
  338. </div>
  339. </div>
  340. <div class="e_add_content">
  341. <div class="e_add_list_pbox">
  342. <div class="e_add_list_pbox_title">
  343. <span class="type_title">切换模式</span>
  344. <div class="type_content">
  345. <span :class="{ active: typeMode == 1 }" @click="OtherMb(1)">目标树</span>
  346. <span :class="{ active: typeMode == 2 }" @click="OtherMb(2)">目标罗盘</span>
  347. <span :class="{ active: typeMode == 3 }" @click="OtherMb(3)">目标看板</span>
  348. </div>
  349. </div>
  350. <div class="e_add_list_pbox_content">
  351. <Mind :showBar="false" :mindData="data" v-show="typeMode == 1"></Mind>
  352. <Sunburst :Josn="eJson" :num="eJSONNum" style="width: 100%" v-if="typeMode == 2"></Sunburst>
  353. <SeeBoard :Josn="eJson" :num="eJSONNum" :ename="eTitle" style="width: 100%"
  354. v-if="typeMode == 3"></SeeBoard>
  355. </div>
  356. </div>
  357. </div>
  358. </div>
  359. </div>
  360. </div>
  361. </div>
  362. <div class="rightBox" v-if="this.steps == 2">
  363. <div class="basic_box" style="padding: 20px 30px 0px !important; box-sizing: border-box">
  364. <!-- <div
  365. style="
  366. color: #b8b8b8;
  367. background: #fff;
  368. width: 26%;
  369. height: 40px;
  370. border-radius: 15px;
  371. padding-left: 20px;
  372. line-height: 40px;
  373. font-size: 17px;
  374. box-shadow: 0px 1px 2px 2px #e0e0e0;
  375. "
  376. >-->
  377. <div class="right_title" style="border: none; margin: 0; padding: 0">
  378. 请选择合适的项目模板
  379. </div>
  380. <div class="wordbox">
  381. <div class="wordTeacher" v-for="(aa, indexF) in templateArray" :key="indexF" @click="checkTemplate(aa)">
  382. <div class="wordPic">
  383. <img src="../../assets/icon/wordMub.png" alt />
  384. </div>
  385. <div style="
  386. margin-top: 10px;
  387. line-height: 19px;
  388. overflow: hidden;
  389. text-overflow: ellipsis;
  390. white-space: nowrap;
  391. padding: 0 20px;
  392. ">
  393. {{ aa.title }}
  394. </div>
  395. </div>
  396. <div class="wordTeacher" @click="checkTemplate2()">
  397. <div class="wordPic">
  398. <img src="../../assets/icon/wordMub.png" alt />
  399. </div>
  400. <div style="
  401. margin-top: 10px;
  402. line-height: 19px;
  403. overflow: hidden;
  404. text-overflow: ellipsis;
  405. white-space: nowrap;
  406. padding: 0 20px;
  407. ">
  408. 新建项目
  409. </div>
  410. </div>
  411. <div class="wordTeacher" @click="checkTemplate1()">
  412. <div class="wordPic">
  413. <img src="../../assets/icon/wordMub.png" alt />
  414. </div>
  415. <div style="
  416. margin-top: 10px;
  417. line-height: 19px;
  418. overflow: hidden;
  419. text-overflow: ellipsis;
  420. white-space: nowrap;
  421. padding: 0 20px;
  422. ">
  423. 我的项目
  424. </div>
  425. </div>
  426. </div>
  427. </div>
  428. </div>
  429. <div class="rightBox" v-if="this.steps == 3" ref="rightboxR">
  430. <div class="basic_box">
  431. <div style="
  432. display: flex;
  433. flex-direction: row;
  434. align-items: center;
  435. position: sticky;
  436. top: 0;
  437. background: #fff;
  438. z-index: 99;
  439. width: 100%;
  440. padding: 0 20px 0 20px;
  441. box-sizing: border-box;
  442. ">
  443. <div class="cru_selectBox">
  444. <div v-for="(item, index) in unitJson" :key="index" class="cru_select"
  445. :class="unitIndex == index ? 'cru_selected' : ''" @click="unitSet(index)">
  446. 第{{ index + 1 }}阶段
  447. </div>
  448. <img src="../../assets/line.png" class="cru_line" :style="{
  449. left: offsetLetfPx + 'px',
  450. }" />
  451. </div>
  452. <div class="addStageImg" @click="addunit()">
  453. <img src="../../assets/icon/add.png" alt />
  454. </div>
  455. </div>
  456. <div style="margin: 0 0 40px 0; padding: 0 20px 0 20px"
  457. v-for="(item, index) in unitJson[unitIndex].chapterInfo" :key="index">
  458. <div>
  459. <div class="chapter_contentbox">
  460. <div>第{{ unitIndex + 1 }}阶段</div>
  461. <div>
  462. <input type="text" placeholder="阶段标题" class="binfo_input" v-model="unitJson[unitIndex].dyName" />
  463. </div>
  464. <div v-if="unitJson.length > 1" @click="deleteUnit(unitIndex)"></div>
  465. </div>
  466. </div>
  467. <div style="
  468. margin: 50px 0px 10px;
  469. font-size: 1.5em;
  470. font-weight: 700;
  471. color: #0f7eff;
  472. ">
  473. 添加任务
  474. </div>
  475. <div class="taskBorder" v-for="(itemTask, itemTaskIndex) in item.taskJson" :key="itemTaskIndex">
  476. <div>
  477. <div>
  478. <div style="font-size: 22px; color: #8e8e8e" :id="'task' + itemTaskIndex">
  479. 任务{{ itemTaskIndex + 1 }}
  480. </div>
  481. <div class="chapter_contentbox" style="
  482. flex-direction: row;
  483. justify-content: flex-start;
  484. align-items: center;
  485. ">
  486. <div style="
  487. border-left: 6px solid #5699e8;
  488. height: 20px;
  489. padding-left: 10px;
  490. line-height: 22px;
  491. ">
  492. 任务名称
  493. </div>
  494. <div>
  495. <input type="text" placeholder="输入任务名称" class="binfo_input" style="border-radius: 4px"
  496. v-model="
  497. unitJson[unitIndex].chapterInfo[0].taskJson[
  498. itemTaskIndex
  499. ].task
  500. " />
  501. </div>
  502. <div class="remove" v-if="item.taskJson.length > 1" @click="deleteTask(itemTaskIndex)"
  503. style="position: absolute; right: 55px"></div>
  504. </div>
  505. <div style="
  506. display: flex;
  507. margin: 0 0 20px 0;
  508. flex-direction: row;
  509. justify-content: flex-start;
  510. align-items: center;
  511. width: 70.5% !important;
  512. padding-top: 30px;
  513. ">
  514. <div class="lineTitle">任务描述</div>
  515. <div class="line"></div>
  516. </div>
  517. <div>
  518. <editor-bar style="width: 90% !important; margin: 0" placeholder="请输入任务描述" v-model="
  519. unitJson[unitIndex].chapterInfo[0].taskJson[
  520. itemTaskIndex
  521. ].taskDetail
  522. " @change="change"></editor-bar>
  523. <!-- <textarea
  524. rows="6"
  525. class="binfo_input"
  526. placeholder="请输入任务描述"
  527. cols
  528. style="width: 70.5% !important; height: 120px"
  529. v-model="
  530. unitJson[unitIndex].chapterInfo[0].taskJson[
  531. itemTaskIndex
  532. ].taskDetail
  533. "
  534. ></textarea>-->
  535. </div>
  536. </div>
  537. </div>
  538. <div class="basic_box" style="
  539. margin: 0;
  540. min-height: 0;
  541. width: 90% !important;
  542. paddint-top: 10px !important;
  543. ">
  544. <div style="
  545. display: flex;
  546. margin: 0 0 20px 0;
  547. flex-direction: row;
  548. justify-content: flex-start;
  549. align-items: center;
  550. ">
  551. <div class="lineTitle">学习内容</div>
  552. <div class="line"></div>
  553. </div>
  554. <div>
  555. <div class="add_chapters_box" v-if="
  556. itemTask.chapterData &&
  557. itemTask.chapterData.length == 0
  558. " style="height: 185px"></div>
  559. <div v-else class="add_chapters_box" style="display: flex; flex-direction: column">
  560. <div class="chapter_upload" v-for="(item1, index1) in itemTask.chapterData" :key="item1.id"
  561. @click="
  562. getChapterData(
  563. $event,
  564. unitIndex,
  565. index,
  566. index1,
  567. item1.type
  568. )
  569. ">
  570. <div class="chapter_upload_t" style="width: 100%"></div>
  571. <div class="chapter_upload_o" style="
  572. position: relative;
  573. display: flex;
  574. align-items: center;
  575. ">
  576. <div class="chapter_upload_l" style="padding: 1px 0 0 10px">
  577. <div v-if="item1.type == 2" class="chapter_upload_l_i1"></div>
  578. <div v-if="
  579. item1.type == 3 ||
  580. item1.type == 6 ||
  581. item1.type == 7
  582. " class="chapter_upload_l_i5" style="margin-left: 1px"></div>
  583. <div v-if="item1.type == 8" class="chapter_upload_l_i8" style="margin-left: 1px"></div>
  584. </div>
  585. <div class="chapter_upload_ic" style="
  586. cursor: pointer;
  587. position: absolute;
  588. width: 45px;
  589. right: 0;
  590. top: 0;
  591. ">
  592. <div class="chapter_upload_ic_l"></div>
  593. <div class="chapter_upload_ic_r" style="position: absolute" @click.stop="
  594. deleteChapterData(
  595. $event,
  596. unitIndex,
  597. index,
  598. index1,
  599. itemTaskIndex
  600. )
  601. ">
  602. <div></div>
  603. </div>
  604. </div>
  605. <div class="chapter_upload_n">
  606. <input v-if="
  607. item1.type == 2 ||
  608. item1.type == 3 ||
  609. item1.type == 7
  610. " :placeholder="item1.name" @change="
  611. updataVideoT(
  612. $event,
  613. unitIndex,
  614. chapterIndex,
  615. index1
  616. )
  617. " style="
  618. border: none;
  619. outline: none;
  620. width: 80%;
  621. minwidth: 215px;
  622. z-index: 99;
  623. font-size: 14px;
  624. white-space: nowrap;
  625. overflow: hidden;
  626. text-overflow: ellipsis;
  627. " />
  628. <input :placeholder="item1.name" v-if="item1.type == 6" style="
  629. border: none;
  630. outline: none;
  631. width: 80%;
  632. white-space: nowrap;
  633. overflow: hidden;
  634. text-overflow: ellipsis;
  635. " readonly="true" @click="selectAttText(itemTaskIndex, index1)" />
  636. <input :placeholder="
  637. item1.title ? item1.title : '链接'
  638. " v-if="item1.type == 8" style="
  639. border: none;
  640. outline: none;
  641. width: 80%;
  642. white-space: nowrap;
  643. overflow: hidden;
  644. text-overflow: ellipsis;
  645. " readonly="true" @click="selectLine(itemTaskIndex, index1)" />
  646. <div class="chapter_upload_ud" style="z-index: 99">
  647. <div class="chapter_upload_up" @click="
  648. upCd($event, unitIndex, index, index1)
  649. "></div>
  650. <div class="chapter_upload_down" @click="
  651. downCd($event, unitIndex, index, index1)
  652. "></div>
  653. </div>
  654. </div>
  655. </div>
  656. </div>
  657. </div>
  658. </div>
  659. <div class="add_info_box">
  660. <button class="info_btn" @click="addImg($event)">
  661. 添加教学视频
  662. <input type="file" accept="video/mp4, video/quicktime, video/x-msvideo" style="display: none"
  663. capture="camera" v-if="inputShow" @change="
  664. beforeUpload2($event, unitIndex, 2, itemTaskIndex)
  665. " />
  666. </button>
  667. <button class="info_btn" @click="addImg($event)">
  668. 添加教学附件
  669. <input type="file"
  670. accept="application/pdf, application/.ppt, .ppt, .pptx, .xlsx, .xls, application/msword, application/vnd.openxmlformats-officedocument.wordprocessingml.document"
  671. style="display: none" v-if="inputShow" @change="
  672. beforeUpload2($event, unitIndex, 3, itemTaskIndex)
  673. " />
  674. </button>
  675. <button class="info_btn" @click="addAttText(itemTaskIndex)">
  676. 添加图文
  677. </button>
  678. <button class="info_btn" @click="openLine(itemTaskIndex)">
  679. 添加链接
  680. </button>
  681. </div>
  682. <div v-if="
  683. unitJson[unitIndex].chapterInfo[0].taskJson[
  684. itemTaskIndex
  685. ].proVisible
  686. " class="mask">
  687. <div class="progressBox">
  688. <div class="lbox">
  689. <img src="../../assets/loading.gif" />上传中,请稍后
  690. </div>
  691. <el-progress :text-inside="true" :stroke-width="20" :percentage="
  692. unitJson[unitIndex].chapterInfo[0].taskJson[
  693. itemTaskIndex
  694. ].progress
  695. ? unitJson[unitIndex].chapterInfo[0].taskJson[
  696. itemTaskIndex
  697. ].progress
  698. : 0
  699. " style="width: 80%"></el-progress>
  700. </div>
  701. </div>
  702. </div>
  703. <div style="
  704. flex-direction: row;
  705. justify-content: flex-start;
  706. align-items: center;
  707. padding: 0 0 0 30px;
  708. paddint-top: 10px !important;
  709. ">
  710. <div style="
  711. display: flex;
  712. flex-direction: row;
  713. align-items: center;
  714. margin-bottom: 20px;
  715. ">
  716. <div class="lineTitle">练习内容</div>
  717. <div class="line" style="width: 90%"></div>
  718. </div>
  719. </div>
  720. <div class="toolChoose" style="padding: 0 0 0 30px">
  721. <div class="tools">
  722. <div class="leftTools" style="
  723. width: 95%;
  724. padding: 0 0 15px 0;
  725. border-bottom: 1px solid #efefef;
  726. margin-bottom: 15px;
  727. " v-for="(itemTool, toolIndex) in itemTask.toolChoose" :key="toolIndex">
  728. <div>
  729. <textarea rows="3" type="text" placeholder="添加工具描述" class="binfo_input"
  730. style="margin: 0 0 20px 0; width: 71.5% !important"
  731. v-model="itemTool.toolDetail"></textarea>
  732. </div>
  733. <div style="
  734. display: flex;
  735. flex-direction: row;
  736. align-items: baseline;
  737. flex-wrap: nowrap;
  738. justify-content: flex-start;
  739. position: relative;
  740. ">
  741. <div style="margin-right: 20px; font-weight: bold">
  742. 步骤 {{ toolIndex + 1 }} :
  743. </div>
  744. <div class="chooseWho">
  745. <div :class="
  746. itemTool.toolType == 0 ? 'isChooseActive' : ''
  747. " @click="(itemTool.toolType = 0), $forceUpdate()">
  748. 互动类
  749. </div>
  750. <div :class="
  751. itemTool.toolType == 1 ? 'isChooseActive' : ''
  752. " @click="(itemTool.toolType = 1), $forceUpdate()">
  753. 思维类
  754. </div>
  755. <div :class="
  756. itemTool.toolType == 2 ? 'isChooseActive' : ''
  757. " @click="(itemTool.toolType = 2), $forceUpdate()">
  758. 评价类
  759. </div>
  760. <div :class="
  761. itemTool.toolType == 3 ? 'isChooseActive' : ''
  762. " @click="(itemTool.toolType = 3), $forceUpdate()">
  763. 编程类
  764. </div>
  765. <div :class="
  766. itemTool.toolType == 5 ? 'isChooseActive' : ''
  767. " @click="(itemTool.toolType = 5), $forceUpdate()">
  768. 学科类
  769. </div>
  770. <div :class="
  771. itemTool.toolType == 4 ? 'isChooseActive' : ''
  772. " @click="(itemTool.toolType = 4), $forceUpdate()">
  773. 其他
  774. </div>
  775. </div>
  776. <div class="remove" @click="deleteTool(itemTaskIndex, toolIndex)"
  777. v-if="itemTask.toolChoose.length > 1" style="position: absolute; right: 55px"></div>
  778. </div>
  779. <div style="min-height: 163px">
  780. <div class="toolSort" v-if="itemTool.toolType == 0">
  781. <!-- <div class="tool">
  782. <div
  783. class="whiteBIcon"
  784. @click="addTools(8, itemTaskIndex, toolIndex)"
  785. >
  786. <img src="../../assets/icon/secondToolList/library.png" alt />
  787. <div style="margin: 5px 0">素材库</div>
  788. </div>
  789. <div class="check" @click="addTools(8, itemTaskIndex, toolIndex)">
  790. <img
  791. src="../../assets/icon/checkNo.png"
  792. alt
  793. v-if="itemTool.tool.indexOf(8) == -1"
  794. />
  795. <div class="checkDiv" v-else><img src="../../assets/icon/checkedIs.png"
  796. alt /><span>已选择</span></div>
  797. </div>
  798. </div>-->
  799. <!-- <div class="tool">
  800. <div
  801. class="whiteBIcon"
  802. @click="addTools(17, itemTaskIndex, toolIndex)"
  803. >
  804. <img
  805. src="../../assets/icon/secondToolList/library.png"
  806. alt
  807. />
  808. <div style="margin: 5px 0">学习资料</div>
  809. </div>
  810. <div
  811. class="check"
  812. @click="addTools(17, itemTaskIndex, toolIndex)"
  813. >
  814. <img
  815. src="../../assets/icon/checkNo.png"
  816. alt
  817. v-if="itemTool.tool.indexOf(17) == -1"
  818. />
  819. <img
  820. src="../../assets/icon/checkedIs.png"
  821. alt
  822. v-else
  823. />
  824. </div>10
  825. </div> -->
  826. <div class="tool">
  827. <div class="whiteBIcon" @click="openTools(itemTaskIndex, 10, toolIndex)">
  828. <img src="../../assets/icon/thirdToolList/time.png" alt />
  829. <div style="margin: 5px 0">倒计时</div>
  830. </div>
  831. <div class="check" @click="addTools(10, itemTaskIndex, toolIndex)">
  832. <img src="../../assets/icon/checkNo.png" alt v-if="itemTool.tool.indexOf(10) == -1" />
  833. <div class="checkDiv" v-else>
  834. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  835. </div>
  836. </div>
  837. </div>
  838. <div class="tool">
  839. <div class="whiteBIcon" @click="openTools(itemTaskIndex, 49, toolIndex)">
  840. <img src="../../assets/icon/fourthToolList/group.png" alt />
  841. <div style="margin: 5px 0">学生分组</div>
  842. </div>
  843. <div class="check" @click="addTools(49, itemTaskIndex, toolIndex)">
  844. <img src="../../assets/icon/checkNo.png" alt v-if="itemTool.tool.indexOf(49) == -1" />
  845. <div class="checkDiv" v-else>
  846. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  847. </div>
  848. </div>
  849. </div>
  850. </div>
  851. <div class="toolSort" v-if="itemTool.toolType == 1">
  852. <div class="tool">
  853. <div class="whiteBIcon" @click="addTools(7, itemTaskIndex, toolIndex)">
  854. <img src="../../assets/icon/secondToolList/mindNetwork.png" alt />
  855. <div style="margin: 5px 0">思维网格</div>
  856. </div>
  857. <div class="check" @click="addTools(7, itemTaskIndex, toolIndex)">
  858. <img src="../../assets/icon/checkNo.png" alt v-if="itemTool.tool.indexOf(7) == -1" />
  859. <div class="checkDiv" v-else>
  860. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  861. </div>
  862. </div>
  863. </div>
  864. <div class="tool">
  865. <div class="whiteBIcon" @click="addTools(1, itemTaskIndex, toolIndex)">
  866. <img src="../../assets/icon/secondToolList/whiteBoard.png" alt />
  867. <div style="margin: 5px 0">电子白板</div>
  868. </div>
  869. <div class="check" @click="addTools(1, itemTaskIndex, toolIndex)">
  870. <img src="../../assets/icon/checkNo.png" alt v-if="itemTool.tool.indexOf(1) == -1" />
  871. <div class="checkDiv" v-else>
  872. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  873. </div>
  874. </div>
  875. </div>
  876. <!-- <div class="tool">
  877. <div
  878. class="whiteBIcon"
  879. @click="addTools(2, itemTaskIndex, toolIndex)"
  880. >
  881. <img
  882. src="../../assets/icon/secondToolList/note.png"
  883. alt
  884. />
  885. <div style="margin: 5px 0">便签</div>
  886. </div>
  887. <div
  888. class="check"
  889. @click="addTools(2, itemTaskIndex, toolIndex)"
  890. >
  891. <img
  892. src="../../assets/icon/checkNo.png"
  893. alt
  894. v-if="itemTool.tool.indexOf(2) == -1"
  895. />
  896. <div class="checkDiv" v-else>
  897. <img
  898. src="../../assets/icon/checkedIs.png"
  899. alt
  900. /><span>已选择</span>
  901. </div>
  902. </div>
  903. </div> -->
  904. <div class="tool">
  905. <div class="whiteBIcon" @click="addTools(6, itemTaskIndex, toolIndex)">
  906. <img src="../../assets/icon/secondToolList/doc.png" alt />
  907. <div style="margin: 5px 0">协同文档</div>
  908. </div>
  909. <div class="check" @click="addTools(6, itemTaskIndex, toolIndex)">
  910. <img src="../../assets/icon/checkNo.png" alt v-if="itemTool.tool.indexOf(6) == -1" />
  911. <div class="checkDiv" v-else>
  912. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  913. </div>
  914. </div>
  915. </div>
  916. <div class="tool">
  917. <div class="whiteBIcon" @click="addTools(3, itemTaskIndex, toolIndex)">
  918. <img src="../../assets/icon/secondToolList/mindMapping.png" alt />
  919. <div style="margin: 5px 0">思维导图</div>
  920. </div>
  921. <div class="check" @click="addTools(3, itemTaskIndex, toolIndex)">
  922. <img src="../../assets/icon/checkNo.png" alt v-if="itemTool.tool.indexOf(3) == -1" />
  923. <div class="checkDiv" v-else>
  924. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  925. </div>
  926. </div>
  927. </div>
  928. </div>
  929. <div class="toolSort" v-if="itemTool.toolType == 2">
  930. <!-- <div class="tool">
  931. <div
  932. class="whiteBIcon"
  933. @click="addTools(5, itemTaskIndex, toolIndex)"
  934. >
  935. <img
  936. src="../../assets/icon/thirdToolList/score.png"
  937. alt
  938. />
  939. <div style="margin: 5px 0">量规评分</div>
  940. </div>
  941. <div
  942. class="check"
  943. @click="addTools(5, itemTaskIndex, toolIndex)"
  944. >
  945. <img
  946. src="../../assets/icon/checkNo.png"
  947. alt
  948. v-if="itemTool.tool.indexOf(5) == -1"
  949. />
  950. <img
  951. src="../../assets/icon/checkedIs.png"
  952. alt
  953. v-else
  954. />
  955. </div>
  956. </div>-->
  957. <div class="tool">
  958. <div class="whiteBIcon" @click="openTools(itemTaskIndex, 4, toolIndex)">
  959. <img src="../../assets/icon/thirdToolList/ask.png" alt />
  960. <div style="margin: 5px 0">问卷调查</div>
  961. </div>
  962. <div class="check" @click="addTools(4, itemTaskIndex, toolIndex)">
  963. <img src="../../assets/icon/checkNo.png" alt v-if="itemTool.tool.indexOf(4) == -1" />
  964. <div class="checkDiv" v-else>
  965. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  966. </div>
  967. </div>
  968. </div>
  969. <div class="tool">
  970. <div class="whiteBIcon" @click="openTools(itemTaskIndex, 45, toolIndex)">
  971. <img src="../../assets/icon/thirdToolList/choose.png" alt />
  972. <div style="margin: 5px 0">选择题</div>
  973. </div>
  974. <div class="check" @click="addTools(45, itemTaskIndex, toolIndex)">
  975. <img src="../../assets/icon/checkNo.png" alt v-if="itemTool.tool.indexOf(45) == -1" />
  976. <div class="checkDiv" v-else>
  977. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  978. </div>
  979. </div>
  980. </div>
  981. <div class="tool">
  982. <div class="whiteBIcon" @click="openTools(itemTaskIndex, 15, toolIndex)">
  983. <img src="../../assets/icon/thirdToolList/answer.png" alt />
  984. <div style="margin: 5px 0">问答工具</div>
  985. </div>
  986. <div class="check" @click="addTools(15, itemTaskIndex, toolIndex)">
  987. <img src="../../assets/icon/checkNo.png" alt v-if="itemTool.tool.indexOf(15) == -1" />
  988. <div class="checkDiv" v-else>
  989. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  990. </div>
  991. </div>
  992. </div>
  993. <div class="tool">
  994. <div class="whiteBIcon" @click="addTools(16, itemTaskIndex, toolIndex)">
  995. <img src="../../assets/icon/thirdToolList/work.png" alt />
  996. <div style="margin: 5px 0">作业提交</div>
  997. </div>
  998. <div class="check" @click="addTools(16, itemTaskIndex, toolIndex)">
  999. <img src="../../assets/icon/checkNo.png" alt v-if="itemTool.tool.indexOf(16) == -1" />
  1000. <div class="checkDiv" v-else>
  1001. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  1002. </div>
  1003. </div>
  1004. </div>
  1005. <div class="tool">
  1006. <div class="whiteBIcon" @click="openTools(itemTaskIndex, 50, toolIndex)">
  1007. <img src="../../assets/icon/thirdToolList/plwork.png" alt />
  1008. <div style="margin: 5px 0">批量上传</div>
  1009. </div>
  1010. <div class="check" @click="addTools(50, itemTaskIndex, toolIndex)">
  1011. <img src="../../assets/icon/checkNo.png" alt v-if="itemTool.tool.indexOf(50) == -1" />
  1012. <div class="checkDiv" v-else>
  1013. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  1014. </div>
  1015. </div>
  1016. </div>
  1017. <div class="tool">
  1018. <div class="whiteBIcon" @click="openTools(itemTaskIndex, 40, toolIndex)">
  1019. <img src="../../assets/icon/thirdToolList/eval.png" alt />
  1020. <div style="margin: 5px 0">个人评价</div>
  1021. </div>
  1022. <div class="check" @click="addTools(40, itemTaskIndex, toolIndex)">
  1023. <img src="../../assets/icon/checkNo.png" alt v-if="itemTool.tool.indexOf(40) == -1" />
  1024. <div class="checkDiv" v-else>
  1025. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  1026. </div>
  1027. </div>
  1028. </div>
  1029. <div class="tool">
  1030. <div class="whiteBIcon" @click="openTools(itemTaskIndex, 41, toolIndex)">
  1031. <img src="../../assets/icon/thirdToolList/select.png" alt />
  1032. <div style="margin: 5px 0">选择填空</div>
  1033. </div>
  1034. <div class="check" @click="addTools(41, itemTaskIndex, toolIndex)">
  1035. <img src="../../assets/icon/checkNo.png" alt v-if="itemTool.tool.indexOf(41) == -1" />
  1036. <div class="checkDiv" v-else>
  1037. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  1038. </div>
  1039. </div>
  1040. </div>
  1041. <div class="tool">
  1042. <div class="whiteBIcon" @click="openTools(itemTaskIndex, 47, toolIndex)">
  1043. <img src="../../assets/icon/fourthToolList/conSentences.png" alt />
  1044. <div style="margin: 5px 0">连词成句</div>
  1045. </div>
  1046. <div class="check" @click="addTools(47, itemTaskIndex, toolIndex)">
  1047. <img src="../../assets/icon/checkNo.png" alt v-if="itemTool.tool.indexOf(47) == -1" />
  1048. <div class="checkDiv" v-else>
  1049. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  1050. </div>
  1051. </div>
  1052. </div>
  1053. <div class="tool">
  1054. <div class="whiteBIcon" @click="openTools(itemTaskIndex, 48, toolIndex)">
  1055. <img src="../../assets/icon/fourthToolList/table.png" alt />
  1056. <div style="margin: 5px 0">表格</div>
  1057. </div>
  1058. <div class="check" @click="addTools(48, itemTaskIndex, toolIndex)">
  1059. <img src="../../assets/icon/checkNo.png" alt v-if="itemTool.tool.indexOf(48) == -1" />
  1060. <div class="checkDiv" v-else>
  1061. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  1062. </div>
  1063. </div>
  1064. </div>
  1065. <!-- <div class="tool">
  1066. <div
  1067. class="whiteBIcon"
  1068. @click="openTools(itemTaskIndex, 42, toolIndex)"
  1069. >
  1070. <img
  1071. src="../../assets/icon/thirdToolList/mp3.png"
  1072. alt
  1073. />
  1074. <div style="margin: 5px 0">上传音频</div>
  1075. </div>
  1076. <div
  1077. class="check"
  1078. @click="addTools(42, itemTaskIndex, toolIndex)"
  1079. >
  1080. <img
  1081. src="../../assets/icon/checkNo.png"
  1082. alt
  1083. v-if="itemTool.tool.indexOf(42) == -1"
  1084. />
  1085. <img
  1086. src="../../assets/icon/checkedIs.png"
  1087. alt
  1088. v-else
  1089. />
  1090. </div>
  1091. </div> -->
  1092. </div>
  1093. <div class="toolSort" v-if="itemTool.toolType == 3">
  1094. <div class="tool">
  1095. <div class="whiteBIcon" @click="addTools(18, itemTaskIndex, toolIndex)">
  1096. <img src="../../assets/icon/thirdToolList/trainPlatform.png" alt />
  1097. <div style="margin: 5px 0">训练平台</div>
  1098. </div>
  1099. <div class="check" @click="addTools(18, itemTaskIndex, toolIndex)">
  1100. <img src="../../assets/icon/checkNo.png" alt v-if="itemTool.tool.indexOf(18) == -1" />
  1101. <div class="checkDiv" v-else>
  1102. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  1103. </div>
  1104. </div>
  1105. </div>
  1106. <div class="tool">
  1107. <div class="whiteBIcon" @click="addTools(21, itemTaskIndex, toolIndex)">
  1108. <img src="../../assets/icon/fourthToolList/program.png" alt />
  1109. <div style="margin: 5px 0">编程平台</div>
  1110. </div>
  1111. <div class="check" @click="addTools(21, itemTaskIndex, toolIndex)">
  1112. <img src="../../assets/icon/checkNo.png" alt v-if="itemTool.tool.indexOf(21) == -1" />
  1113. <div class="checkDiv" v-else>
  1114. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  1115. </div>
  1116. </div>
  1117. </div>
  1118. <div class="tool">
  1119. <div class="whiteBIcon" @click="addTools(22, itemTaskIndex, toolIndex)">
  1120. <img src="../../assets/icon/fourthToolList/AIprogram2.png" alt />
  1121. <div style="margin: 5px 0">AI体验</div>
  1122. </div>
  1123. <div class="check" @click="addTools(22, itemTaskIndex, toolIndex)">
  1124. <img src="../../assets/icon/checkNo.png" alt v-if="itemTool.tool.indexOf(22) == -1" />
  1125. <div class="checkDiv" v-else>
  1126. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  1127. </div>
  1128. </div>
  1129. </div>
  1130. <div class="tool">
  1131. <div class="whiteBIcon" @click="addTools(23, itemTaskIndex, toolIndex)">
  1132. <img src="../../assets/icon/fourthToolList/Pythonprogram.png" alt />
  1133. <div style="margin: 5px 0">Python</div>
  1134. </div>
  1135. <div class="check" @click="addTools(23, itemTaskIndex, toolIndex)">
  1136. <img src="../../assets/icon/checkNo.png" alt v-if="itemTool.tool.indexOf(23) == -1" />
  1137. <div class="checkDiv" v-else>
  1138. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  1139. </div>
  1140. </div>
  1141. </div>
  1142. <div class="tool">
  1143. <div class="whiteBIcon" @click="addTools(24, itemTaskIndex, toolIndex)">
  1144. <img src="../../assets/icon/fourthToolList/AIprogram.png" alt />
  1145. <div style="margin: 5px 0">AI平台</div>
  1146. </div>
  1147. <div class="check" @click="addTools(24, itemTaskIndex, toolIndex)">
  1148. <img src="../../assets/icon/checkNo.png" alt v-if="itemTool.tool.indexOf(24) == -1" />
  1149. <div class="checkDiv" v-else>
  1150. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  1151. </div>
  1152. </div>
  1153. </div>
  1154. <div class="tool">
  1155. <div class="whiteBIcon" @click="addTools(32, itemTaskIndex, toolIndex)">
  1156. <img src="../../assets/icon/thirdToolList/code.png" alt />
  1157. <div style="margin: 5px 0">源码编辑</div>
  1158. </div>
  1159. <div class="check" @click="addTools(32, itemTaskIndex, toolIndex)">
  1160. <img src="../../assets/icon/checkNo.png" alt v-if="itemTool.tool.indexOf(32) == -1" />
  1161. <div class="checkDiv" v-else>
  1162. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  1163. </div>
  1164. </div>
  1165. </div>
  1166. </div>
  1167. <div class="toolSort" v-if="itemTool.toolType == 5">
  1168. <div class="tool">
  1169. <div class="whiteBIcon" @click="addTools(28, itemTaskIndex, toolIndex)">
  1170. <img src="../../assets/icon/secondToolList/translation.png" alt />
  1171. <div style="margin: 5px 0">翻译</div>
  1172. </div>
  1173. <div class="check" @click="addTools(28, itemTaskIndex, toolIndex)">
  1174. <img src="../../assets/icon/checkNo.png" alt v-if="itemTool.tool.indexOf(28) == -1" />
  1175. <div class="checkDiv" v-else>
  1176. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  1177. </div>
  1178. </div>
  1179. </div>
  1180. <div class="tool">
  1181. <div class="whiteBIcon" @click="addTools(37, itemTaskIndex, toolIndex)">
  1182. <img src="../../assets/icon/secondToolList/mohe.png" alt />
  1183. <div style="margin: 5px 0">魔盒识字</div>
  1184. </div>
  1185. <div class="check" @click="addTools(37, itemTaskIndex, toolIndex)">
  1186. <img src="../../assets/icon/checkNo.png" alt v-if="itemTool.tool.indexOf(37) == -1" />
  1187. <div class="checkDiv" v-else>
  1188. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  1189. </div>
  1190. </div>
  1191. </div>
  1192. <div class="tool">
  1193. <div class="whiteBIcon" @click="addTools(38, itemTaskIndex, toolIndex)">
  1194. <img src="../../assets/icon/secondToolList/24game.png" alt />
  1195. <div style="margin: 5px 0">24点</div>
  1196. </div>
  1197. <div class="check" @click="addTools(38, itemTaskIndex, toolIndex)">
  1198. <img src="../../assets/icon/checkNo.png" alt v-if="itemTool.tool.indexOf(38) == -1" />
  1199. <div class="checkDiv" v-else>
  1200. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  1201. </div>
  1202. </div>
  1203. </div>
  1204. <div class="tool">
  1205. <div class="whiteBIcon" @click="addTools(31, itemTaskIndex, toolIndex)">
  1206. <img src="../../assets/icon/secondToolList/networkPanel.png" alt />
  1207. <div style="margin: 5px 0">数学画板</div>
  1208. </div>
  1209. <div class="check" @click="addTools(31, itemTaskIndex, toolIndex)">
  1210. <img src="../../assets/icon/checkNo.png" alt v-if="itemTool.tool.indexOf(31) == -1" />
  1211. <div class="checkDiv" v-else>
  1212. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  1213. </div>
  1214. </div>
  1215. </div>
  1216. <div class="tool">
  1217. <div class="whiteBIcon" @click="addTools(39, itemTaskIndex, toolIndex)">
  1218. <img src="../../assets/icon/secondToolList/GeoGebra.png" alt />
  1219. <div style="margin: 5px 0">GeoGebra</div>
  1220. </div>
  1221. <div class="check" @click="addTools(39, itemTaskIndex, toolIndex)">
  1222. <img src="../../assets/icon/checkNo.png" alt v-if="itemTool.tool.indexOf(39) == -1" />
  1223. <div class="checkDiv" v-else>
  1224. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  1225. </div>
  1226. </div>
  1227. </div>
  1228. </div>
  1229. <div class="toolSort" v-if="itemTool.toolType == 4">
  1230. <div class="tool">
  1231. <div class="whiteBIcon" @click="addTools(26, itemTaskIndex, toolIndex)">
  1232. <img src="../../assets/icon/thirdToolList/courseDesign.png" alt />
  1233. <div style="margin: 5px 0">项目设计</div>
  1234. </div>
  1235. <div class="check" @click="addTools(26, itemTaskIndex, toolIndex)">
  1236. <img src="../../assets/icon/checkNo.png" alt v-if="itemTool.tool.indexOf(26) == -1" />
  1237. <div class="checkDiv" v-else>
  1238. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  1239. </div>
  1240. </div>
  1241. </div>
  1242. <div class="tool">
  1243. <div class="whiteBIcon" @click="addTools(25, itemTaskIndex, toolIndex)">
  1244. <img src="../../assets/icon/thirdToolList/evalua.png" alt />
  1245. <div style="margin: 5px 0">目标管理</div>
  1246. </div>
  1247. <div class="check" @click="addTools(25, itemTaskIndex, toolIndex)">
  1248. <img src="../../assets/icon/checkNo.png" alt v-if="itemTool.tool.indexOf(25) == -1" />
  1249. <div class="checkDiv" v-else>
  1250. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  1251. </div>
  1252. </div>
  1253. </div>
  1254. <div class="tool">
  1255. <div class="whiteBIcon" @click="addTools(44, itemTaskIndex, toolIndex)">
  1256. <img src="../../assets/icon/thirdToolList/hanClass.png" alt />
  1257. <div style="margin: 5px 0">汉字宫</div>
  1258. </div>
  1259. <div class="check" @click="addTools(44, itemTaskIndex, toolIndex)">
  1260. <img src="../../assets/icon/checkNo.png" alt v-if="itemTool.tool.indexOf(44) == -1" />
  1261. <div class="checkDiv" v-else>
  1262. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  1263. </div>
  1264. </div>
  1265. </div>
  1266. </div>
  1267. </div>
  1268. </div>
  1269. <div class="addToolFun" @click="addToolFun(itemTaskIndex)">
  1270. <div class="addToolImg">
  1271. <img src="../../assets/icon/add.png" alt />
  1272. </div>
  1273. <div>添加工具</div>
  1274. </div>
  1275. </div>
  1276. </div>
  1277. <div class="elist_css">
  1278. <div class="elist_title">
  1279. <div style="
  1280. display: flex;
  1281. flex-direction: row;
  1282. align-items: center;
  1283. margin-bottom: 20px;
  1284. ">
  1285. <div class="lineTitle">评价设置</div>
  1286. <div class="line" style="width: 90%"></div>
  1287. </div>
  1288. </div>
  1289. <div class="mbCss">
  1290. <div class="pjCss">
  1291. <div v-if="itemTask.eList && itemTask.eList.length" class="elist_input">
  1292. <div v-for="(eItem, eIndex) in itemTask.eList" :key="eIndex" class="elist_input_box">
  1293. <span>评价名称:</span>
  1294. <input type="input" v-model="itemTask.eList[eIndex].value" placeholder="填写评价名称" />
  1295. <span>评星等级:</span>
  1296. <el-rate v-model="itemTask.eList[eIndex].score" @change="setEListStar()" disabled></el-rate>
  1297. <div class="remove" @click="
  1298. deletEList(unitIndex, itemTaskIndex, eIndex)
  1299. "></div>
  1300. <div class="elist_inptu_text">
  1301. <span>评价描述:</span>
  1302. <input type="input" v-model="itemTask.eList[eIndex].detail" placeholder="填写评价描述" />
  1303. </div>
  1304. <div class="elist_inptu_text" v-if="evalua">
  1305. <span>目标:</span>
  1306. <!-- <input type="input" v-model="itemTask.eList[eIndex].target" placeholder="填写评价描述" /> -->
  1307. <!-- <el-select v-model="itemTask.eList[eIndex].target" placeholder="请选择目标"
  1308. @change="forceUpdate()">
  1309. <el-option v-for="(e, eIndex) in targetArray" :key="eIndex" :label="e.name"
  1310. :value="e.name">
  1311. </el-option>
  1312. </el-select> -->
  1313. <el-cascader :options="targetArray" v-model="itemTask.eList[eIndex].target"
  1314. :props="{ checkStrictly: true }" :show-all-levels="false" clearable></el-cascader>
  1315. </div>
  1316. </div>
  1317. </div>
  1318. <div class="addToolFun" @click="addEList(unitIndex, itemTaskIndex)"
  1319. style="margin: 35px 35px 0 0">
  1320. <div class="addToolImg">
  1321. <img src="../../assets/icon/add.png" alt />
  1322. </div>
  1323. <div>添加</div>
  1324. </div>
  1325. </div>
  1326. <div v-if="evalua" style="
  1327. border: 1px solid #e5e5e5;
  1328. width: 55%;
  1329. margin-top: 20px;
  1330. box-shadow: 3px 1px 15px 3px #e0e0e0;
  1331. " class="evaCss">
  1332. <div class="e_add_top">
  1333. <div class="e_add_title">
  1334. <span>当前使用目标管理</span>
  1335. <span>{{ eTitle }}</span>
  1336. <img src="../../assets/line.png" class="cru_line" style="
  1337. width: 125px;
  1338. height: 20px;
  1339. bottom: -10px;
  1340. left: 155px;
  1341. " />
  1342. <!-- <el-input
  1343. v-model="eTitle"
  1344. placeholder="请输入名称"
  1345. @change="setMindData"
  1346. ></el-input>-->
  1347. </div>
  1348. </div>
  1349. <div class="e_add_content" style="width: 100%">
  1350. <div class="e_add_list_pbox" style="width: 100%">
  1351. <div class="e_add_list_pbox_title">
  1352. <span class="type_title">切换模式</span>
  1353. <div class="type_content">
  1354. <span :class="{ active: typeMode == 1 }" @click="OtherMb(1)">目标树</span>
  1355. <span :class="{ active: typeMode == 2 }" @click="OtherMb(2)">目标罗盘</span>
  1356. <span :class="{ active: typeMode == 3 }" @click="OtherMb(3)">目标看板</span>
  1357. </div>
  1358. </div>
  1359. <div class="e_add_list_pbox_content">
  1360. <Mind :showBar="false" :mindData="data" style="width: 100%" :jsmindId="
  1361. unitIndex + '-' + itemTaskIndex + 'mind'
  1362. " v-if="typeMode == 1"></Mind>
  1363. <Sunburst :Josn="eJson" :num="eJSONNum" style="width: 100%" v-if="typeMode == 2">
  1364. </Sunburst>
  1365. <SeeBoard :Josn="eJson" :num="eJSONNum" :ename="eTitle" style="width: 100%"
  1366. v-if="typeMode == 3"></SeeBoard>
  1367. </div>
  1368. </div>
  1369. </div>
  1370. </div>
  1371. </div>
  1372. </div>
  1373. <div class="funBlock" style="padding: 0">
  1374. <div class="fold" @click="fold(itemTaskIndex, $event, 1)">
  1375. <div>折叠</div>
  1376. <div class="arrow">
  1377. <img src="../../assets/icon/fold.png" alt />
  1378. </div>
  1379. </div>
  1380. <div class="fold" @click="fold(itemTaskIndex, $event, 0)">
  1381. <div>展开</div>
  1382. <div class="arrow">
  1383. <img src="../../assets/icon/expand.png" alt />
  1384. </div>
  1385. </div>
  1386. </div>
  1387. </div>
  1388. <div class="addTaskBorder" @click="addTaskBorder">
  1389. <div>
  1390. <img src="../../assets/icon/addHw.png" alt />
  1391. <span>添加任务</span>
  1392. </div>
  1393. </div>
  1394. </div>
  1395. </div>
  1396. </div>
  1397. <div style="
  1398. width: calc(100% - 20px);
  1399. background: rgb(255, 255, 255);
  1400. border-radius: 10px;
  1401. " v-if="this.steps == 4">
  1402. <div class="basic_box_success">
  1403. <div class="right_img">
  1404. <img src="../../assets/icon/right.png" alt />
  1405. </div>
  1406. <div style="font-weight: bold">成功</div>
  1407. <!-- <div>您的项目编号</div>
  1408. <div class="number">{{ number }}</div>-->
  1409. <!-- <div class="success_button">
  1410. <div class="look_course" @click="isNoFinsh">
  1411. 邀请老师协同编辑
  1412. </div>
  1413. <div class="attend_others" @click="goCourse">预览项目</div>
  1414. </div> -->
  1415. </div>
  1416. </div>
  1417. <div class="info_btnBox">
  1418. <button class="info_btn" v-if="steps == 1" @click="
  1419. goTo('/course?userid=' + userid + '&oid=' + oid + '&org=' + org)
  1420. ">
  1421. 返回项目
  1422. </button>
  1423. <button class="info_btn" v-if="steps > 1 && steps != 5" @click="lastSteps">
  1424. {{ steps == 4 ? "返回首页" : "上一步" }}
  1425. </button>
  1426. <button class="info_btn" v-if="steps < 4" @click="nextSteps">
  1427. {{ steps == 3 ? "确认上传" : "下一步" }}
  1428. </button>
  1429. </div>
  1430. </div>
  1431. </div>
  1432. </div>
  1433. <el-dialog title="提示" :visible.sync="dialogVisible" :append-to-body="true" width="25%" :before-close="handleClose"
  1434. class="dialog_diy2 customWidth">
  1435. <div>请复制该链接邀请协同编辑</div>
  1436. <div>http://www.boomyon.com/index-zhang.com</div>
  1437. <span slot="footer" class="dialog-footer">
  1438. <el-button type="primary">复制链接分享</el-button>
  1439. <el-button @click="dialogVisible = false">取消</el-button>
  1440. </span>
  1441. </el-dialog>
  1442. <el-dialog :title="updateBoolean2 ? '查看文档' : '添加文档'" :visible.sync="dialogVisible1" :append-to-body="true"
  1443. width="25%" :before-close="handleClose" class="dialog_diy2 customWidth">
  1444. <el-form>
  1445. <el-form-item label="文档标题">
  1446. <el-input v-model="tTitle" auto-complete="off" placeholder="请输入文档标题名..."></el-input>
  1447. </el-form-item>
  1448. <div>文档简介</div>
  1449. <editor-bar v-model="tdetail" @change="change"></editor-bar>
  1450. </el-form>
  1451. <span slot="footer" class="dialog-footer">
  1452. <el-button @click="dialogVisible1 = false">取 消</el-button>
  1453. <el-button type="primary" @click="addWord" v-if="!updateBoolean2">添加</el-button>
  1454. <el-button type="primary" @click="upWord" v-else>修 改</el-button>
  1455. </span>
  1456. </el-dialog>
  1457. <el-dialog title="添加文档" :visible.sync="dialogVisible2" :append-to-body="true" width="500px"
  1458. :before-close="handleClose" class="dialog_diy">
  1459. <el-form>
  1460. <el-form-item label="文档标题">
  1461. <el-input v-model="templateC.title" auto-complete="off" placeholder="请输入文档标题名..."></el-input>
  1462. </el-form-item>
  1463. <div>文档内容</div>
  1464. <editor-bar v-model="cTemplate" @change="change"></editor-bar>
  1465. </el-form>
  1466. <span slot="footer" class="dialog-footer">
  1467. <el-button @click="clearChoose">取 消</el-button>
  1468. <el-button type="primary" @click="wordNext()">确定</el-button>
  1469. </span>
  1470. </el-dialog>
  1471. <el-dialog title="添加富文本" :visible.sync="dialogVisible6" :append-to-body="true" width="500px"
  1472. :before-close="handleClose" class="dialog_diy">
  1473. <el-form>
  1474. <el-form-item label="文本标题">
  1475. <el-input v-model="AttText.title" auto-complete="off" @input="change2" placeholder="请输入文本标题..."></el-input>
  1476. </el-form-item>
  1477. <div>富文本内容</div>
  1478. <editor-bar v-model="AttText.text" @change="change"></editor-bar>
  1479. </el-form>
  1480. <span slot="footer" class="dialog-footer">
  1481. <el-button @click="clearAttText">取 消</el-button>
  1482. <el-button type="primary" @click="isAddOrUpdateAttText">确定</el-button>
  1483. </span>
  1484. </el-dialog>
  1485. <el-dialog title="添加链接" :visible.sync="dialogVisible7" :append-to-body="true" width="500px"
  1486. :before-close="handleClose" class="dialog_diy lineCss">
  1487. <el-form>
  1488. <el-form-item label="标题" :label-width="formLabelWidth">
  1489. <span>
  1490. <el-input placeholder="请输入链接标题" clearable v-model="lineTitle" class="add_input"></el-input>
  1491. </span>
  1492. </el-form-item>
  1493. <el-form-item label="链接" :label-width="formLabelWidth">
  1494. <span>
  1495. <el-input placeholder="请输入链接" clearable v-model="line" class="add_input"></el-input>
  1496. </span>
  1497. </el-form-item>
  1498. </el-form>
  1499. <span slot="footer" class="dialog-footer">
  1500. <el-button @click="clearLine">取 消</el-button>
  1501. <el-button type="primary" @click="isAddOrUpdateLine">确定</el-button>
  1502. </span>
  1503. </el-dialog>
  1504. <el-dialog title="添加项目成员" :visible.sync="dialogVisible3" :append-to-body="true" width="25%" height="80%"
  1505. :before-close="handleClose" class="addNewPP customWidth">
  1506. <div class="people">
  1507. <div class="people_top">
  1508. <div class="people_nav">选择成员</div>
  1509. <div class="people_top_right">
  1510. <div class="people_search">
  1511. <el-input style="height: 100%" placeholder="搜索成员名称" v-model="searchPeople"></el-input>
  1512. <div class="search_img" @click="searchStudent">
  1513. <img src="../../assets/icon/search.png" alt />
  1514. </div>
  1515. </div>
  1516. </div>
  1517. </div>
  1518. <el-checkbox-group v-model="checkboxList" class="people_name">
  1519. <el-checkbox v-for="item in studentJuri" :key="item.userid" :label="item.userid">{{
  1520. item.name ? item.name :
  1521. "暂无学生可选"
  1522. }}</el-checkbox>
  1523. </el-checkbox-group>
  1524. </div>
  1525. <span slot="footer" class="dialog-footer">
  1526. <el-button @click="dialogVisible3 = false">取 消</el-button>
  1527. <el-button type="primary" @click="isAddPP">确定</el-button>
  1528. </span>
  1529. </el-dialog>
  1530. <el-dialog title="添加班级" :visible.sync="dialogVisibleClass" :append-to-body="true" width="400px" height="80%"
  1531. :before-close="handleClose" class="addNewPP">
  1532. <div class="people" style="height: 300px">
  1533. <div class="people_top">
  1534. <div class="people_nav">选择班级</div>
  1535. </div>
  1536. <el-checkbox-group v-model="checkboxList2" class="people_name">
  1537. <div v-for="(item, index) in grade" :key="item.id">
  1538. <el-checkbox :label="item.id">
  1539. {{ item.name ? item.name : "暂无班级可选" }}
  1540. </el-checkbox>
  1541. <div>
  1542. <span>{{ index }}</span>
  1543. </div>
  1544. </div>
  1545. </el-checkbox-group>
  1546. </div>
  1547. <span slot="footer" class="dialog-footer">
  1548. <el-button @click="dialogVisibleClass = false">取 消</el-button>
  1549. <el-button type="primary" @click="isAddClass">确定</el-button>
  1550. </span>
  1551. </el-dialog>
  1552. <el-dialog title="添加协同成员" :visible.sync="dialogVisibleMember" :append-to-body="true" width="25%" height="80%"
  1553. :before-close="handleClose" class="addNewPP customWidth">
  1554. <div class="people">
  1555. <div class="people_top">
  1556. <div class="people_top_right">
  1557. <div class="people_search">
  1558. <el-input placeholder="搜索成员名称" v-model="searchTN" @keyup.enter.native="getTeacher"></el-input>
  1559. <div class="search_img" @click="getTeacher">
  1560. <img src="../../assets/icon/search.png" alt />
  1561. </div>
  1562. </div>
  1563. </div>
  1564. <div class="people_nav">选择成员</div>
  1565. </div>
  1566. <el-checkbox-group v-model="checkboxList3" class="people_name" v-if="teacherJuri.length">
  1567. <el-checkbox v-for="item in teacherJuri" :key="item.userid" :label="item.userid">
  1568. <div class="t_j_box">
  1569. <el-tooltip placement="top" :content="item.name ? item.name : '暂无姓名'">
  1570. <span>{{ item.name ? item.name : "暂无姓名" }}</span>
  1571. </el-tooltip>
  1572. <el-tooltip placement="top" :content="item.username">
  1573. <span>{{ item.username }}</span>
  1574. </el-tooltip>
  1575. <el-tooltip placement="top" :content="item.school">
  1576. <span>{{ item.school }}</span>
  1577. </el-tooltip>
  1578. </div>
  1579. </el-checkbox>
  1580. </el-checkbox-group>
  1581. <div style="text-align: center; margin-top: 10px" v-else>暂无数据</div>
  1582. </div>
  1583. <span slot="footer" class="dialog-footer">
  1584. <el-button @click="dialogVisibleMember = false">取 消</el-button>
  1585. <el-button type="primary" @click="isAddPPTeacher">确定</el-button>
  1586. </span>
  1587. </el-dialog>
  1588. <el-dialog title="创建问卷" :visible.sync="dialogVisible5" :append-to-body="true" width="800px"
  1589. :before-close="handleClose" class="dialog_diy">
  1590. <div>
  1591. <div class="a_add_title" style="
  1592. display: flex;
  1593. flex-direction: row;
  1594. align-items: center;
  1595. justify-content: center;
  1596. ">
  1597. <div style="margin-right: 20px; font-size: 20px">标题:</div>
  1598. <el-input v-model="askJson.askTitle" placeholder="请输入标题" style="width: 400px"></el-input>
  1599. </div>
  1600. <div class="a_addBox">
  1601. <div style="font-size: 16px; color: #c7c7c7">请输入题目内容</div>
  1602. <div class="a_add_box" v-for="(item1, index1) in askJson.askCount" :key="index1">
  1603. <div class="a_add_head">
  1604. <div>
  1605. {{ index1 + 1 + "、" }}
  1606. <el-input class="a_add_head_input" v-model="askJson.askJson[index1].askstitle" placeholder="请输入题目...">
  1607. </el-input>
  1608. </div>
  1609. <div class="a_add_head_div">
  1610. <el-button type="primary" size="small" @click="addAskList()">添加</el-button>
  1611. <el-button type="primary" size="small" @click="deleteAskList(index1)" v-if="askJson.askCount != 1">删除
  1612. </el-button>
  1613. </div>
  1614. </div>
  1615. <div class="a_add_body">
  1616. <div class="a_add_input">
  1617. <el-input v-for="(item2, checkIndex) in askJson.askJson[index1].askItem" :key="checkIndex"
  1618. v-model="askJson.askJson[index1].checkList[checkIndex]" placeholder="请输入选项..."
  1619. style="width: 150px; margin: 10px 10px 0 0"></el-input>
  1620. </div>
  1621. <div class="a_add_body_div">
  1622. <el-button style="margin: 10px 0px 0 0" type="primary" size="small"
  1623. @click="addcheckList(askJson.askJson[index1])">添加</el-button>
  1624. <el-button type="primary" size="small" style="margin: 10px 0 0 10px"
  1625. @click="deletecheckList(askJson.askJson[index1])" v-if="askJson.askJson[index1].askItem != 1">删除
  1626. </el-button>
  1627. </div>
  1628. </div>
  1629. </div>
  1630. </div>
  1631. </div>
  1632. <span slot="footer" class="dialog-footer">
  1633. <el-button @click="dialogVisible5 = false">取 消</el-button>
  1634. <el-button type="primary" @click="addAsk">确 定</el-button>
  1635. </span>
  1636. </el-dialog>
  1637. <el-dialog title="创建选择题" :visible.sync="dialogVisibleChoice" :append-to-body="true" width="800px"
  1638. :before-close="handleClose" class="dialog_diy">
  1639. <div>
  1640. <!-- <div class="a_add_title" style="
  1641. display: flex;
  1642. flex-direction: row;
  1643. align-items: center;
  1644. justify-content: center;
  1645. ">
  1646. <div style="margin-right: 20px; font-size: 20px">标题:</div>
  1647. <el-input v-model="testJson.testTitle" placeholder="请输入标题" style="width: 400px"></el-input>
  1648. </div> -->
  1649. <div class="a_addBox">
  1650. <div style="font-size: 16px; color: #c7c7c7">请输入题目内容</div>
  1651. <div class="a_add_box" v-for="(item1, index1) in testJson.testCount" :key="index1">
  1652. <div class="a_add_checkType">
  1653. <span :class="{ active: testJson.testJson[index1].type == '1' }"
  1654. @click="checkTestType('1', testJson.testJson[index1])">单选题</span>
  1655. <span :class="{ active: testJson.testJson[index1].type == '2' }"
  1656. @click="checkTestType('2', testJson.testJson[index1])">多选题</span>
  1657. </div>
  1658. <div class="a_add_head">
  1659. <div>
  1660. {{ index1 + 1 + "、" }}
  1661. <el-input class="a_add_head_input" v-model="testJson.testJson[index1].teststitle"
  1662. placeholder="请输入题目...">
  1663. </el-input>
  1664. </div>
  1665. <div class="a_add_head_div">
  1666. <el-button type="primary" size="small" @click="addTestList()">添加</el-button>
  1667. <el-button type="primary" size="small" @click="deleteTestList(index1)" v-if="testJson.testCount != 1">删除
  1668. </el-button>
  1669. </div>
  1670. </div>
  1671. <div class="a_add_body">
  1672. <div class="a_add_input a_add_input_choice">
  1673. <el-radio-group v-model="testJson.testJson[index1].answer" v-if="testJson.testJson[index1].type == 1">
  1674. <div class="radioBox">
  1675. <el-radio
  1676. v-for="(item2, checkIndex) in testJson.testJson[index1]
  1677. .testItem"
  1678. :key="checkIndex"
  1679. :label="checkIndex"
  1680. >
  1681. <div style="margin-right:10px">选项{{ checkIndex + 1 }} </div>
  1682. <div
  1683. style="margin-right: 10px; width: 300px"
  1684. v-if="
  1685. testJson.testJson[index1].checkList[checkIndex] &&
  1686. testJson.testJson[index1].checkList[checkIndex]
  1687. .imgType &&
  1688. testJson.testJson[index1].checkList[checkIndex]
  1689. .imgType == 1
  1690. ">
  1691. <div class="inImg" @click.stop="previewImg(testJson.testJson[index1].checkList[checkIndex].src)">
  1692. <el-image :src="testJson.testJson[index1].checkList[checkIndex].src" lazy />
  1693. <!-- <img :src="
  1694. testJson.testJson[index1].checkList[checkIndex]
  1695. .src
  1696. " alt="" /> -->
  1697. </div>
  1698. </div>
  1699. <el-input
  1700. v-else
  1701. v-model="
  1702. testJson.testJson[index1].checkList[checkIndex]
  1703. "
  1704. placeholder="请输入选项..."
  1705. style="width: 300px; margin-right: 10px"
  1706. ></el-input>
  1707. <div class="xzUpImg" @click.stop="addImg($event)">
  1708. <img src="../../assets/icon/xzUpImg.png" alt="">
  1709. <input
  1710. type="file"
  1711. accept="image/*"
  1712. style="display: none"
  1713. @change="beforeUploadTi($event, index1, checkIndex)"
  1714. />
  1715. </div>
  1716. </el-radio>
  1717. </div>
  1718. </el-radio-group>
  1719. <el-checkbox-group v-model="testJson.testJson[index1].answer"
  1720. v-if="testJson.testJson[index1].type == '2'">
  1721. <div class="radioBox">
  1722. <el-checkbox
  1723. v-for="(item2, checkIndex1) in testJson.testJson[index1]
  1724. .testItem"
  1725. :key="checkIndex1"
  1726. :label="checkIndex1"
  1727. >
  1728. <div style="margin-right:10px">选项{{ checkIndex1 + 1 }} </div>
  1729. <div
  1730. style="margin-right: 10px; width: 300px"
  1731. v-if="
  1732. testJson.testJson[index1].checkList[checkIndex1] &&
  1733. testJson.testJson[index1].checkList[checkIndex1]
  1734. .imgType &&
  1735. testJson.testJson[index1].checkList[checkIndex1]
  1736. .imgType == 1
  1737. "
  1738. >
  1739. <div class="inImg" @click.stop="previewImg(testJson.testJson[index1].checkList[checkIndex1].src)">
  1740. <el-image :src="testJson.testJson[index1].checkList[checkIndex1].src" lazy />
  1741. <!-- <img :src="
  1742. testJson.testJson[index1].checkList[checkIndex1]
  1743. .src
  1744. " alt="" /> -->
  1745. </div>
  1746. </div>
  1747. <el-input
  1748. v-else
  1749. v-model="
  1750. testJson.testJson[index1].checkList[checkIndex1]
  1751. "
  1752. placeholder="请输入选项..."
  1753. style="width: 300px; margin-right: 10px"
  1754. ></el-input>
  1755. <div class="xzUpImg" @click.stop="addImg($event)">
  1756. <img src="../../assets/icon/xzUpImg.png" alt="">
  1757. <input
  1758. type="file"
  1759. accept="image/*"
  1760. style="display: none"
  1761. @change="
  1762. beforeUploadTi($event, index1, checkIndex1)
  1763. "
  1764. />
  1765. </div>
  1766. </el-checkbox>
  1767. </div>
  1768. </el-checkbox-group>
  1769. </div>
  1770. <div class="a_add_body_div" style="margin-bottom: 3px">
  1771. <el-button type="primary" size="small" @click="addTcheckList(testJson.testJson[index1])">添加</el-button>
  1772. <el-button type="primary" size="small" @click="deleteTcheckList(testJson.testJson[index1])"
  1773. v-if="testJson.testJson[index1].testItem != 1">删除
  1774. </el-button>
  1775. </div>
  1776. </div>
  1777. </div>
  1778. </div>
  1779. </div>
  1780. <span slot="footer" class="dialog-footer">
  1781. <el-button @click="dialogVisibleChoice = false">取 消</el-button>
  1782. <el-button type="primary" @click="addTest">确 定</el-button>
  1783. </span>
  1784. </el-dialog>
  1785. <el-dialog title="添加工具" :visible.sync="dialogVisible4" :append-to-body="true" width="600px"
  1786. :before-close="handleClose" class="dialog_diy addToolsDia">
  1787. <div class="toolChoose" style="padding: 0 0 0 30px">
  1788. <div class="tools">
  1789. <div class="leftTools" style="
  1790. width: 95%;
  1791. padding: 0 0 15px 0;
  1792. border-bottom: 1px solid #efefef;
  1793. margin-bottom: 15px;
  1794. " v-for="(itemTools, itemToolsIndex) in chapTools" :key="itemToolsIndex">
  1795. <div style="
  1796. display: flex;
  1797. flex-direction: row;
  1798. align-items: baseline;
  1799. flex-wrap: nowrap;
  1800. justify-content: flex-start;
  1801. position: relative;
  1802. ">
  1803. <div class="chooseWho">
  1804. <div :class="chapToolsType == 0 ? 'isChooseActive' : ''" @click="chapToolsType = 0">
  1805. 互动类
  1806. </div>
  1807. <div :class="chapToolsType == 1 ? 'isChooseActive' : ''" @click="chapToolsType = 1">
  1808. 思维类
  1809. </div>
  1810. <div :class="chapToolsType == 2 ? 'isChooseActive' : ''" @click="chapToolsType = 2">
  1811. 评价类
  1812. </div>
  1813. <div :class="chapToolsType == 2 ? 'isChooseActive' : ''" @click="chapToolsType = 2">
  1814. 其他
  1815. </div>
  1816. </div>
  1817. </div>
  1818. <div style="min-height: 163px">
  1819. <div class="toolSort" v-if="chapToolsType == 0">
  1820. <div class="tool">
  1821. <div class="whiteBIcon" @click="chapAddTools(8)">
  1822. <img src="../../assets/icon/secondToolList/library.png" alt />
  1823. <div style="margin: 5px 0">素材库</div>
  1824. </div>
  1825. <div class="check" @click="chapAddTools(8)">
  1826. <img src="../../assets/icon/checkNo.png" alt v-if="itemTools.tools.indexOf(8) == -1" />
  1827. <div class="checkDiv" v-else>
  1828. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  1829. </div>
  1830. </div>
  1831. </div>
  1832. </div>
  1833. <div class="toolSort" v-if="chapToolsType == 1">
  1834. <div class="tool">
  1835. <div class="whiteBIcon" @click="chapAddTools(7)">
  1836. <img src="../../assets/icon/secondToolList/mindNetwork.png" alt />
  1837. <div style="margin: 5px 0">思维网格</div>
  1838. </div>
  1839. <div class="check" @click="chapAddTools(7)">
  1840. <img src="../../assets/icon/checkNo.png" alt v-if="itemTools.tools.indexOf(7) == -1" />
  1841. <div class="checkDiv" v-else>
  1842. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  1843. </div>
  1844. </div>
  1845. </div>
  1846. <div class="tool">
  1847. <div class="whiteBIcon" @click="chapAddTools(1)">
  1848. <img src="../../assets/icon/secondToolList/whiteBoard.png" alt />
  1849. <div style="margin: 5px 0">电子白板</div>
  1850. </div>
  1851. <div class="check" @click="chapAddTools(1)">
  1852. <img src="../../assets/icon/checkNo.png" alt v-if="itemTools.tools.indexOf(1) == -1" />
  1853. <div class="checkDiv" v-else>
  1854. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  1855. </div>
  1856. </div>
  1857. </div>
  1858. <div class="tool">
  1859. <div class="whiteBIcon" @click="chapAddTools(2)">
  1860. <img src="../../assets/icon/secondToolList/note.png" alt />
  1861. <div style="margin: 5px 0">便签</div>
  1862. </div>
  1863. <div class="check" @click="chapAddTools(2)">
  1864. <img src="../../assets/icon/checkNo.png" alt v-if="itemTools.tools.indexOf(2) == -1" />
  1865. <div class="checkDiv" v-else>
  1866. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  1867. </div>
  1868. </div>
  1869. </div>
  1870. <div class="tool">
  1871. <div class="whiteBIcon" @click="chapAddTools(6)">
  1872. <img src="../../assets/icon/secondToolList/doc.png" alt />
  1873. <div style="margin: 5px 0">协同文档</div>
  1874. </div>
  1875. <div class="check" @click="chapAddTools(6)">
  1876. <img src="../../assets/icon/checkNo.png" alt v-if="itemTools.tools.indexOf(6) == -1" />
  1877. <div class="checkDiv" v-else>
  1878. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  1879. </div>
  1880. </div>
  1881. </div>
  1882. <div class="tool">
  1883. <div class="whiteBIcon" @click="chapAddTools(3)">
  1884. <img src="../../assets/icon/secondToolList/mindMapping.png" alt />
  1885. <div style="margin: 5px 0">思维导图</div>
  1886. </div>
  1887. <div class="check" @click="chapAddTools(3)">
  1888. <img src="../../assets/icon/checkNo.png" alt v-if="itemTools.tools.indexOf(3) == -1" />
  1889. <div class="checkDiv" v-else>
  1890. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  1891. </div>
  1892. </div>
  1893. </div>
  1894. <div class="tool">
  1895. <div class="whiteBIcon" @click="chapAddTools(31)">
  1896. <img src="../../assets/icon/secondToolList/networkPanel.png" alt />
  1897. <div style="margin: 5px 0">数学画板</div>
  1898. </div>
  1899. <div class="check" @click="chapAddTools(31)">
  1900. <img src="../../assets/icon/checkNo.png" alt v-if="itemTools.tools.indexOf(31) == -1" />
  1901. <div class="checkDiv" v-else>
  1902. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  1903. </div>
  1904. </div>
  1905. </div>
  1906. </div>
  1907. <div class="toolSort" v-if="chapToolsType == 2">
  1908. <div class="tool">
  1909. <div class="whiteBIcon" @click="chapAddTools(5)">
  1910. <img src="../../assets/icon/thirdToolList/score.png" alt />
  1911. <div style="margin: 5px 0">量规评分</div>
  1912. </div>
  1913. <div class="check" @click="chapAddTools(5)">
  1914. <img src="../../assets/icon/checkNo.png" alt v-if="itemTools.tools.indexOf(5) == -1" />
  1915. <div class="checkDiv" v-else>
  1916. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  1917. </div>
  1918. </div>
  1919. </div>
  1920. <div class="tool">
  1921. <div class="whiteBIcon" @click="openTools(chapCount, 4, null)">
  1922. <img src="../../assets/icon/thirdToolList/ask.png" alt />
  1923. <div style="margin: 5px 0">问卷调查</div>
  1924. </div>
  1925. <div class="check" @click="chapAddTools(4)">
  1926. <img src="../../assets/icon/checkNo.png" alt v-if="itemTools.tools.indexOf(4) == -1" />
  1927. <div class="checkDiv" v-else>
  1928. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  1929. </div>
  1930. </div>
  1931. </div>
  1932. </div>
  1933. </div>
  1934. <div>
  1935. <input type="text" placeholder="添加工具描述" class="binfo_input"
  1936. style="margin: 20px 0; width: 71.5% !important" v-model="itemTools.toolDetail" />
  1937. </div>
  1938. </div>
  1939. </div>
  1940. </div>
  1941. <span slot="footer" class="dialog-footer">
  1942. <el-button @click="dialogVisible4 = false">取 消</el-button>
  1943. <el-button type="primary" @click="addChaptersDataTools">确定</el-button>
  1944. </span>
  1945. </el-dialog>
  1946. <el-dialog title="添加问答" :visible.sync="dialogVisible8" :append-to-body="true" width="500px"
  1947. :before-close="handleClose" class="dialog_diy">
  1948. <div>
  1949. <div class="a_add_title" style="
  1950. display: flex;
  1951. flex-direction: column;
  1952. align-items: flex-start;
  1953. justify-content: center;
  1954. ">
  1955. <div style="margin-bottom: 20px; font-size: 20px">问题:</div>
  1956. <el-input v-model="answerQ" placeholder="请输入您要问的问题"></el-input>
  1957. </div>
  1958. </div>
  1959. <span slot="footer" class="dialog-footer">
  1960. <el-button @click="dialogVisible8 = false">取 消</el-button>
  1961. <el-button type="primary" @click="addAnswer">确 定</el-button>
  1962. </span>
  1963. </el-dialog>
  1964. <el-dialog title="添加问题" :visible.sync="dialogVisibleMp3" :append-to-body="true" width="500px"
  1965. :before-close="handleClose" class="dialog_diy">
  1966. <div>
  1967. <div class="a_add_title" style="
  1968. display: flex;
  1969. flex-direction: column;
  1970. align-items: flex-start;
  1971. justify-content: center;
  1972. ">
  1973. <div style="margin-bottom: 20px; font-size: 20px">问题:</div>
  1974. <el-input v-model="answerQ" placeholder="请输入您想要回答的问题"></el-input>
  1975. </div>
  1976. </div>
  1977. <span slot="footer" class="dialog-footer">
  1978. <el-button @click="dialogVisibleMp3 = false">取 消</el-button>
  1979. <el-button type="primary" @click="addMp3Answer">确 定</el-button>
  1980. </span>
  1981. </el-dialog>
  1982. <el-dialog title="上传图片" :visible.sync="choosePicVisible" :append-to-body="true" width="500px"
  1983. :before-close="handleClose" class="dialog_diy">
  1984. <div>
  1985. <div class="fileCss" style="padding-top: 20px">
  1986. <div>
  1987. <button class="info_btn" @click="addImg($event)">
  1988. 选择本地文件
  1989. <input type="file" accept="image/*" style="display: none" @change="beforeUpload1" />
  1990. </button>
  1991. </div>
  1992. <div>
  1993. <el-button @click="getAllBanner" v-if="isSysPic == false && cover.length == 0">选择系统文件</el-button>
  1994. <div class="isSysPic" v-if="isSysPic == true && cover.length > 0">
  1995. <img :src="cover[0].url" alt="" />
  1996. <div class="deletePic" @click="deleteSysPic">
  1997. <img src="../../assets/icon/delete.png" alt="" />
  1998. </div>
  1999. </div>
  2000. </div>
  2001. </div>
  2002. <div class="fileCss">
  2003. <div>选择本地文件</div>
  2004. <div>选择系统文件</div>
  2005. </div>
  2006. </div>
  2007. <span slot="footer" class="dialog-footer">
  2008. <el-button @click="choosePicVisible = false">取 消</el-button>
  2009. <el-button type="primary" @click="choosePicVisible = false">确 定</el-button>
  2010. </span>
  2011. </el-dialog>
  2012. <el-dialog title="选择系统文件" :visible.sync="sysPicVisible" :append-to-body="true" width="710px"
  2013. :before-close="handleClose" class="dialog_diy">
  2014. <div class="cru_selectBox" style="margin: 0">
  2015. <div @click="getChoosePic(1)" class="cru_select" :class="chooseType == 1 ? 'cru_selected' : ''">
  2016. 绘画
  2017. </div>
  2018. <div @click="getChoosePic(2)" class="cru_select" :class="chooseType == 2 ? 'cru_selected' : ''">
  2019. 科技
  2020. </div>
  2021. <div @click="getChoosePic(3)" class="cru_select" :class="chooseType == 3 ? 'cru_selected' : ''">
  2022. 人文
  2023. </div>
  2024. <div @click="getChoosePic(4)" class="cru_select" :class="chooseType == 4 ? 'cru_selected' : ''">
  2025. 艺术
  2026. </div>
  2027. </div>
  2028. <div class="sysPicBox">
  2029. <div v-for="(sys, sysIndex) in sysPic" :key="sysIndex" class="sysPic">
  2030. <img :src="sys.poster" alt="" @click="chooseSysPic(sys.poster)" />
  2031. </div>
  2032. </div>
  2033. <span slot="footer" class="dialog-footer">
  2034. <el-button @click="sysPicVisible = false">取 消</el-button>
  2035. <el-button type="primary">确 定</el-button>
  2036. </span>
  2037. </el-dialog>
  2038. <el-dialog title="选择填空" :visible.sync="dialogVisibleSelect" :append-to-body="true" width="800px"
  2039. :before-close="handleClose" class="dialog_diy dialog_diy3">
  2040. <div v-if="selectJson">
  2041. <div class="select_box1" v-if="selectSteps == 1">
  2042. <div class="select_box1_img">
  2043. <div class="select_box1_title">
  2044. <span>上传题目图片</span><span>提示:请将题目以图片的方式上传</span>
  2045. </div>
  2046. <div class="select_box1_add_img">
  2047. <div class="uploadFm" @click="addImg($event)" v-if="!selectJson.url">
  2048. <input type="file" accept="image/*" style="display: none" @change="beforeUploadSelect" />
  2049. <img src="../../assets/icon/addPoster.png" alt="" />
  2050. </div>
  2051. <div class="isSysPic" v-else>
  2052. <img :src="selectJson.url" alt="" />
  2053. <div class="deletePic" @click="deleteSelectPic">
  2054. <img src="../../assets/icon/delete.png" alt="" />
  2055. </div>
  2056. </div>
  2057. </div>
  2058. </div>
  2059. <div class="select_box1_select">
  2060. <div class="select_box1_title">
  2061. <span>添加选项</span><span>提示:请输入题目选项</span>
  2062. </div>
  2063. <div class="select_box1_select_box">
  2064. <el-input v-for="(item2, checkIndex) in selectJson.select" :key="checkIndex"
  2065. v-model="selectJson.select[checkIndex]" placeholder="请输入选项..."
  2066. style="width: 150px; margin: 10px 10px 0 0"></el-input>
  2067. <div class="select_box1_select_box_add">
  2068. <el-button style="margin: 10px 0px 0 0" type="primary" size="small" @click="addSelectList(selectJson)">
  2069. 添加</el-button>
  2070. <el-button type="primary" size="small" style="margin: 10px 0 0 0" @click="deleteSelectList(selectJson)"
  2071. v-if="selectJson.select && selectJson.select.length > 0">删除</el-button>
  2072. </div>
  2073. </div>
  2074. </div>
  2075. </div>
  2076. <div v-if="selectSteps == 2">
  2077. <div class="select_box2">
  2078. <div class="select_box2_title">设置答案</div>
  2079. <div class="select_box2_box">
  2080. <div class="select_box2_img">
  2081. <img :src="selectJson.url" alt="" />
  2082. </div>
  2083. <div class="select_box2_answer">
  2084. <div class="select_answer_title">根据题目选择对应答案</div>
  2085. <div class="select_box2_answer_box" v-for="(item2, checkIndex) in selectJson.select" :key="checkIndex">
  2086. <span>{{ checkIndex + 1 }}、</span>
  2087. <el-select v-model="selectJson.answer[checkIndex]" placeholder="请选择正确答案">
  2088. <el-option v-for="(e, eIndex) in selectJson.select" :key="eIndex" :label="e" :value="eIndex">
  2089. </el-option>
  2090. </el-select>
  2091. </div>
  2092. </div>
  2093. </div>
  2094. </div>
  2095. </div>
  2096. </div>
  2097. <span slot="footer" class="dialog-footer">
  2098. <el-button type="primary" @click="nextSelectSteps()" v-if="selectSteps == 1">下一步</el-button>
  2099. <el-button @click="selectSteps--" v-if="selectSteps == 2">上一步</el-button>
  2100. <el-button type="primary" @click="addSelectAnswer" v-if="selectSteps == 2">确 定</el-button>
  2101. </span>
  2102. </el-dialog>
  2103. <el-dialog title="添加评价" :visible.sync="dialogVisibleRate" :append-to-body="true" width="650px"
  2104. :before-close="handleClose" class="dialog_diy">
  2105. <div style="background: #fff; padding: 15px; box-sizing: border-box">
  2106. <div style="font-size: 18px; color: #a9a9a9">请输入个人评价指标:</div>
  2107. <div class="pjCss" style="width: 100%">
  2108. <div v-if="rateJson.length" class="elist_input" style="height: 360px; overflow: auto">
  2109. <div v-for="(eItem, eIndex) in rateJson" :key="eIndex" class="elist_input_box">
  2110. <span style="min-width: 100px; text-align: right">个人评价指标:</span>
  2111. <input type="input" v-model="eItem.value" placeholder="填写评价名称" />
  2112. <div class="remove" @click="deletRateList(eIndex)"></div>
  2113. <div style="width: 100%; display: flex">
  2114. <span style="min-width: 100px; text-align: right">评星等级:</span>
  2115. <el-rate v-model="eItem.score" disabled></el-rate>
  2116. </div>
  2117. <div class="elist_inptu_text" style="align-items: flex-start">
  2118. <span style="min-width: 100px; text-align: right">描述:</span>
  2119. <textarea class="rate_textarea" :rows="3" v-model="eItem.detail" placeholder="填写评价描述"></textarea>
  2120. </div>
  2121. </div>
  2122. </div>
  2123. <div class="addToolFun" @click="addRateList()">
  2124. <div class="addToolImg">
  2125. <img src="../../assets/icon/add.png" alt />
  2126. </div>
  2127. <div>添加</div>
  2128. </div>
  2129. </div>
  2130. </div>
  2131. <span slot="footer" class="dialog-footer">
  2132. <el-button @click="dialogVisibleRate = false">取 消</el-button>
  2133. <el-button type="primary" @click="addRateAnswer">确 定</el-button>
  2134. </span>
  2135. </el-dialog>
  2136. <el-dialog title="连词成句设置" :visible.sync="dialogVisibleSentence" :append-to-body="true" width="1000px"
  2137. :before-close="handleClose" class="dialog_diy dialog_diy3">
  2138. <div>
  2139. <div class="sentenBox">
  2140. <div class="addSen" @click="addSt">添加题目</div>
  2141. <div v-for="(st, stIndex) in sentenceList" :key="stIndex" style="padding-bottom: 20px">
  2142. <div class="sentenTopBox">
  2143. <div class="sentenTop">
  2144. <div>题目设置</div>
  2145. <div>
  2146. <el-input placeholder="请输入卡片内容" v-model="st.sentenceTitle"></el-input>
  2147. </div>
  2148. <div @click="addSen(stIndex)">添加</div>
  2149. </div>
  2150. <div class="remove1" v-if="sentenceList.length > 1" @click="deleteSentence(stIndex)"></div>
  2151. </div>
  2152. <div class="cardList">
  2153. <div v-if="st.addSentence.length > 0" class="cardBox">
  2154. <div class="isCard" v-for="(s, sIndex) in st.addSentence" :key="sIndex"
  2155. @click="setRightAnswer(s, stIndex, sIndex)">
  2156. <el-tooltip class="item" effect="light" :content="s" placement="top">
  2157. <div>{{ s }}</div>
  2158. </el-tooltip>
  2159. <div class="deleteWord" @click.stop="deleteS(s, stIndex, sIndex)">
  2160. <img src="../../assets/icon/delete.png" alt="" />
  2161. </div>
  2162. </div>
  2163. </div>
  2164. <div class="card">
  2165. <img src="../../assets/icon/conSentences/noTitle.png" alt="" />
  2166. </div>
  2167. </div>
  2168. <div class="rightCardBox">
  2169. <div>正确顺序</div>
  2170. <div class="rightCardList">
  2171. <div v-if="st.rightAnswer.length > 0" class="cardBox">
  2172. <div v-for="(r, rIndex) in st.rightAnswer" :key="rIndex" class="cardCss">
  2173. <div class="isCard1" @click="returnCard(r, stIndex, rIndex)">
  2174. <el-tooltip class="item" effect="light" :content="r" placement="top">
  2175. <div>{{ r }}</div>
  2176. </el-tooltip>
  2177. </div>
  2178. <div>{{ rIndex + 1 }}</div>
  2179. </div>
  2180. </div>
  2181. <div class="card" v-if="st.rightAnswer.length == 0">
  2182. <img src="../../assets/icon/conSentences/noAnswer.png" alt="" />
  2183. </div>
  2184. </div>
  2185. </div>
  2186. </div>
  2187. </div>
  2188. </div>
  2189. <span slot="footer" class="dialog-footer">
  2190. <el-button @click="dialogVisibleSentence = false">取 消</el-button>
  2191. <el-button type="primary" @click="addSentenceTool">确 定</el-button>
  2192. </span>
  2193. </el-dialog>
  2194. <el-dialog title="添加表格" :visible.sync="dialogVisibleTable" :append-to-body="true" width="95%"
  2195. :before-close="handleClose" class="dialog_diy">
  2196. <el-form>
  2197. <!-- <el-form-item label="文本标题">
  2198. <el-input v-model="AttText.title" auto-complete="off" @input="change2" placeholder="请输入文本标题..."></el-input>
  2199. </el-form-item> -->
  2200. <div>表格内容</div>
  2201. <Table v-model="tableJson.text" @change="change"></Table>
  2202. </el-form>
  2203. <span slot="footer" class="dialog-footer">
  2204. <el-button @click="dialogVisibleTable = false">取 消</el-button>
  2205. <el-button type="primary" @click="addTableJson">确定</el-button>
  2206. </span>
  2207. </el-dialog>
  2208. <el-dialog title="添加班级" :visible.sync="dialogVisibleMoreUpload" :append-to-body="true" width="30%"
  2209. :before-close="handleClose" class="dialog_diy">
  2210. <div style="
  2211. width: 100%;
  2212. display: flex;
  2213. flex-direction: row;
  2214. flex-wrap: nowrap;
  2215. align-items: center;
  2216. justify-content: center;
  2217. ">
  2218. <div>班级:</div>
  2219. <el-select multiple v-model="uploadJson" placeholder="请选择">
  2220. <el-option v-for="item in classJuri" :key="item.id" :label="item.name" :value="item.id">
  2221. </el-option>
  2222. </el-select>
  2223. </div>
  2224. <span slot="footer" class="dialog-footer">
  2225. <el-button @click="dialogVisibleMoreUpload = false">取 消</el-button>
  2226. <el-button type="primary" @click="addMoreUpload">确定</el-button>
  2227. </span>
  2228. </el-dialog>
  2229. <el-dialog title="添加预设时间" :visible.sync="dialogVisiblePreTime" :append-to-body="true" width="30%"
  2230. :before-close="handleClose" class="dialog_diy">
  2231. <div>
  2232. <Time :preTime="preTime" @updateTimeNum="updateTime" v-if="dialogVisiblePreTime"></Time>
  2233. </div>
  2234. <span slot="footer" class="dialog-footer">
  2235. <el-button @click="dialogVisiblePreTime = false">取 消</el-button>
  2236. <el-button type="primary" @click="addPreTime">确定</el-button>
  2237. </span>
  2238. </el-dialog>
  2239. <el-dialog title="分组设置" :visible.sync="dialogVisibleGroup" :append-to-body="true" width="650px"
  2240. :before-close="handleClose" class="dialog_diy">
  2241. <div class="groupBox">
  2242. <div v-if="groupJson.group" class="groupContent">
  2243. <div class="groupTitle">请设置小组数量</div>
  2244. <div v-for="(item, index) in groupJson.group" :key="index" class="groupName">
  2245. <span class="groupn">组{{ index + 1 }}名称:</span>
  2246. <el-input v-model="item.name" placeholder="请输入名称..." style="width: 250px"></el-input>
  2247. <div class="groupBtn">
  2248. <el-button type="primary" size="small" @click="addGroup(index)">
  2249. 添加</el-button>
  2250. <el-button type="primary" size="small" @click="deleteGroup(index)"
  2251. v-if="groupJson.group && groupJson.group.length > 1">删除</el-button>
  2252. </div>
  2253. </div>
  2254. </div>
  2255. <div class="groupContent">
  2256. <div class="groupTitle">请设置每组人数数量</div>
  2257. <!-- <el-input v-model="groupJson.number" placeholder="2-10人以内"
  2258. style="width: 150px; margin: 10px 10px 0 0"></el-input> -->
  2259. <el-input-number v-model="groupJson.number" :controls="false" :min="2" :max="10"
  2260. placeholder="2-10人以内"></el-input-number>
  2261. </div>
  2262. </div>
  2263. <span slot="footer" class="dialog-footer">
  2264. <el-button @click="dialogVisibleGroup = false">取 消</el-button>
  2265. <el-button type="primary" @click="addGroupJson">确定</el-button>
  2266. </span>
  2267. </el-dialog>
  2268. </div>
  2269. </template>
  2270. <script>
  2271. import "../../common/aws-sdk-2.235.1.min.js";
  2272. import $ from "jquery";
  2273. import EditorBar from "../../components/tools/wangEnduit";
  2274. import Table from "../../components/tools/table";
  2275. import Mind from "../tools/jsmind2";
  2276. import Time from "../tools/time.vue";
  2277. import Sunburst from "../tools/sunburst";
  2278. import SeeBoard from "../tools/seeBoard";
  2279. export default {
  2280. components: { EditorBar, Mind, Time, Sunburst, SeeBoard, Table },
  2281. data() {
  2282. return {
  2283. checkAll: false,
  2284. chooseType: 1,
  2285. checkedCities: [],
  2286. isIndeterminate: true,
  2287. isSysPic: false,
  2288. steps: 1,
  2289. nbOrder: 0,
  2290. courseId: "",
  2291. chapToolsType: 0,
  2292. chapTools: [
  2293. {
  2294. tools: [],
  2295. toolDetail: "",
  2296. },
  2297. ],
  2298. line: "",
  2299. lineTitle: "",
  2300. sysPic: [],
  2301. sentenceList: [{ sentenceTitle: "", addSentence: [], rightAnswer: [] }],
  2302. isPushTitleList: [],
  2303. lineCount: 0,
  2304. lineType: 0,
  2305. chapCount: 0,
  2306. courseName: "",
  2307. isTeacherSee: true,
  2308. courseText: "",
  2309. preTime: 0,
  2310. formLabelWidth: "100px",
  2311. choosePicVisible: false,
  2312. sysPicVisible: false,
  2313. uploadLoading1: false,
  2314. noneBtnImg: false,
  2315. updateBoolean2: false,
  2316. unitIndex: 0,
  2317. taskCount: 0,
  2318. dialogVisible: false,
  2319. dialogVisible1: false,
  2320. dialogVisible2: false,
  2321. dialogVisible3: false,
  2322. dialogVisible4: false,
  2323. dialogVisible5: false,
  2324. dialogVisible6: false,
  2325. dialogVisible7: false,
  2326. dialogVisible8: false,
  2327. dialogVisible9: false,
  2328. dialogVisibleClass: false,
  2329. dialogVisibleMember: false,
  2330. dialogVisibleMp3: false,
  2331. dialogVisibleSelect: false,
  2332. dialogVisibleSentence: false,
  2333. dialogVisibleRate: false,
  2334. dialogVisibleChoice: false,
  2335. isClickColor: 0,
  2336. publicTool: 0,
  2337. searchPeople: "",
  2338. searchTN: "",
  2339. userid: this.$route.query.userid,
  2340. oid: this.$route.query.oid,
  2341. org: this.$route.query.org,
  2342. cid: this.$route.query.cid != undefined ? this.$route.query.cid : "",
  2343. dialogVisibleTable: false,
  2344. tableJson: { text: "" },
  2345. dialogVisibleMoreUpload: false,
  2346. dialogVisiblePreTime: false,
  2347. uploadJson: [],
  2348. classJuri: [],
  2349. cover: [], //项目封面
  2350. myWord: [],
  2351. evaJuri: [],
  2352. evalua: "",
  2353. targetArray: [],
  2354. eTitle: "",
  2355. eJson: {},
  2356. fid: "", //一级
  2357. sid: "", //二级
  2358. tid: "", //二级
  2359. typeMode: 1,
  2360. eJSONNum: 0,
  2361. data: {
  2362. meta: {
  2363. name: "example",
  2364. author: "dd@163.com",
  2365. version: "0.2",
  2366. },
  2367. format: "node_array",
  2368. data: [{ id: "root", isroot: true, topic: "" }],
  2369. },
  2370. askJson: {
  2371. askCount: 1,
  2372. askTitle: "",
  2373. askJson: [{ askstitle: "", askItem: 1, checkList: [] }],
  2374. },
  2375. testJson: {},
  2376. selectJson: {},
  2377. rateJson: [],
  2378. unitJson2: [],
  2379. unitJson: [
  2380. {
  2381. dyName: "", //单元标题
  2382. chapterInfo: [
  2383. {
  2384. isread: false,
  2385. chapterid: this.guid(),
  2386. title: "",
  2387. courseName: "",
  2388. taskJson: [
  2389. {
  2390. task: "",
  2391. taskDetail: "",
  2392. chapterData: [],
  2393. toolText: "",
  2394. toolChoose: [
  2395. {
  2396. tool: [],
  2397. toolDetail: "",
  2398. toolType: 0,
  2399. askCount: 1,
  2400. askTitle: "",
  2401. askJson: [{ askstitle: "", askItem: 1, checkList: [] }],
  2402. },
  2403. ],
  2404. isShowTools: false,
  2405. askCount: 1,
  2406. isFold: 0,
  2407. askTitle: "",
  2408. askJson: [{ askstitle: "", askItem: 1, checkList: [] }],
  2409. checkJson: [{ checkCount: [], checkPerent: [] }],
  2410. homeworkList: [],
  2411. },
  2412. ],
  2413. itemCount: 1,
  2414. fileList1: [],
  2415. video: [],
  2416. testData: [],
  2417. pData: [],
  2418. templateArray: [],
  2419. },
  2420. ],
  2421. },
  2422. ],
  2423. studentJuri: [],
  2424. teacherJuri: [],
  2425. checkboxList: [],
  2426. checkboxList2: [],
  2427. checkboxList3: [],
  2428. number: "",
  2429. tTitle: "",
  2430. tdetail: "",
  2431. templateC: {},
  2432. AttText: {},
  2433. AttTextType: 0,
  2434. AttTextIndex: 0,
  2435. cTemplate: "",
  2436. CourseType: [],
  2437. CourseTypeJson: {},
  2438. courseTypeId: [],
  2439. courseTypeSon: [],
  2440. clearArray: [],
  2441. loading: false,
  2442. toolType: 0,
  2443. inputShow: true,
  2444. toolIndex: 0,
  2445. cidType: 0,
  2446. answerQ: "",
  2447. grade: [],
  2448. courseUserid: "",
  2449. timer: null,
  2450. timer2: null,
  2451. checkId: "",
  2452. isDelete: 1,
  2453. addindex: 0,
  2454. selectSteps: 1,
  2455. groupJson: {},
  2456. dialogVisibleGroup: false,
  2457. rightBoxHeight: 0,
  2458. ManAarray: []
  2459. };
  2460. },
  2461. computed: {
  2462. // rightBoxHeight: function () {
  2463. // return $(".rightBox")[0] ? $(".rightBox")[0].scrollHeight : 1000
  2464. // },
  2465. offsetLetfPx: function () {
  2466. //addnum可以直接在模板语法里面用,相当于data内的值
  2467. return (
  2468. $(".cru_select")[this.unitIndex] &&
  2469. $(".cru_select")[this.unitIndex].offsetLeft
  2470. );
  2471. },
  2472. getMan2() {
  2473. return function (people) {
  2474. let _people = people
  2475. let _people2 = ''
  2476. if (this.ManAarray.length) {
  2477. for (var i = 0; i < this.ManAarray.length; i++) {
  2478. if (this.ManAarray[i].userid == people) {
  2479. _people2 = this.ManAarray[i].name;
  2480. break;
  2481. }
  2482. }
  2483. }
  2484. if (people == this.courseUserid) {
  2485. return ''
  2486. }
  2487. return this.ManAarray.length ? _people2 : ''
  2488. }
  2489. },
  2490. getClassC(){
  2491. return function (c) {
  2492. let _c2 = ''
  2493. if (this.grade.length) {
  2494. for (var i = 0; i < this.grade.length; i++) {
  2495. if (this.grade[i].id == c) {
  2496. _c2 = this.grade[i].name;
  2497. break;
  2498. }
  2499. }
  2500. }
  2501. return this.grade.length ? _c2 : ''
  2502. }
  2503. }
  2504. },
  2505. watch: {
  2506. unitIndex(newValue, oldValue) {
  2507. if (this.isDelete == 2) {
  2508. this.isDelete = 1;
  2509. return;
  2510. }
  2511. if (this.cid != "") {
  2512. let _unitIndex = oldValue;
  2513. if (
  2514. JSON.stringify(this.unitJson2[_unitIndex]) ==
  2515. JSON.stringify(this.unitJson[_unitIndex])
  2516. ) {
  2517. this.$refs.rightboxR.scrollTop = 0;
  2518. return;
  2519. }
  2520. let cPan = 1;
  2521. for (
  2522. var j = 0;
  2523. j < this.unitJson[_unitIndex].chapterInfo[0].taskJson.length;
  2524. j++
  2525. ) {
  2526. if (
  2527. this.unitJson[_unitIndex].chapterInfo[0].taskJson[j].toolChoose
  2528. .length > 1
  2529. ) {
  2530. for (
  2531. var z = 0;
  2532. z <
  2533. this.unitJson[_unitIndex].chapterInfo[0].taskJson[j].toolChoose
  2534. .length;
  2535. z++
  2536. ) {
  2537. if (
  2538. !this.unitJson[_unitIndex].chapterInfo[0].taskJson[j]
  2539. .toolChoose[z].tool.length
  2540. ) {
  2541. this.$message.error("请把工具添加完整");
  2542. cPan = 2;
  2543. break;
  2544. }
  2545. }
  2546. }
  2547. if (this.unitJson[_unitIndex].chapterInfo[0].taskJson[j].eList) {
  2548. this.unitJson[_unitIndex].chapterInfo[0].taskJson[j].eList =
  2549. this.unitJson[_unitIndex].chapterInfo[0].taskJson[j].eList.filter(
  2550. (ele) => {
  2551. return ele.value != "";
  2552. }
  2553. );
  2554. }
  2555. }
  2556. if (cPan == 2) {
  2557. this.unitIndex = oldValue;
  2558. return;
  2559. }
  2560. for (var i = 0; i < this.unitJson.length; i++) {
  2561. if (this.addindex != i) {
  2562. delete this.unitJson[i].isUpdate;
  2563. }
  2564. }
  2565. this.$refs.rightboxR.scrollTop = 0;
  2566. this.addindex = -1;
  2567. let params = [
  2568. {
  2569. cid: this.cid,
  2570. chapters: JSON.stringify(this.unitJson),
  2571. uid: this.userid,
  2572. unitIndex: _unitIndex,
  2573. },
  2574. ];
  2575. this.ajax
  2576. .post(this.$store.state.api + "updateWorkNew4", params)
  2577. .then((res) => {
  2578. // this.$message({
  2579. // message: "修改成功",
  2580. // type: "success",
  2581. // });
  2582. // this.courseId = this.cid;
  2583. })
  2584. .catch((err) => {
  2585. this.$message.error("网络不佳");
  2586. console.error(err);
  2587. });
  2588. }
  2589. },
  2590. },
  2591. methods: {
  2592. setMan() {
  2593. // let teacherJuri = this.teacherJuri2;
  2594. this.ManAarray = []
  2595. if (this.checkboxList3.indexOf(this.courseUserid || this.userid) == -1) {
  2596. this.checkboxList3.push(this.courseUserid || this.userid)
  2597. }
  2598. let params = {
  2599. uid: this.checkboxList3.join(","),
  2600. };
  2601. this.ajax
  2602. .get(
  2603. this.$store.state.api + "getAllUserById",
  2604. params
  2605. )
  2606. .then((res) => {
  2607. let teacherJuri = res.data[0];
  2608. this.ManAarray = teacherJuri;
  2609. })
  2610. .catch((err) => {
  2611. console.error(err);
  2612. });
  2613. },
  2614. previewImg(url) {
  2615. this.$hevueImgPreview(url);
  2616. },
  2617. scrollChange() {
  2618. this.rightBoxHeight = $(".rightBox")[0].scrollHeight
  2619. },
  2620. handleCheckAllChange(val) {
  2621. this.checkedCities = val ? cityOptions : [];
  2622. this.isIndeterminate = false;
  2623. },
  2624. handleCheckedCitiesChange(value) {
  2625. let checkedCount = value.length;
  2626. this.checkAll = checkedCount === this.cities.length;
  2627. this.isIndeterminate =
  2628. checkedCount > 0 && checkedCount < this.cities.length;
  2629. },
  2630. addHw(e) {
  2631. var el = e.currentTarget;
  2632. el.getElementsByTagName("input")[0].click();
  2633. },
  2634. change(val) {
  2635. console.log(val);
  2636. },
  2637. change2(val) {
  2638. console.log(val);
  2639. this.$forceUpdate();
  2640. },
  2641. handleClose(done) {
  2642. done();
  2643. },
  2644. imgChange2(i, j) {
  2645. var _tmp = this.testJson.testJson[i].checkList[j];
  2646. this.noneBtnImg = _tmp.length >= 1;
  2647. },
  2648. imgChange1(file, fileList, type, itemTaskIndex) {
  2649. if (type == 1) {
  2650. var _tmp = this.cover;
  2651. } else if (
  2652. type == 2 ||
  2653. type == 3 ||
  2654. type == 6 ||
  2655. type == 7 ||
  2656. type == 8
  2657. ) {
  2658. var _tmp =
  2659. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  2660. .chapterData;
  2661. } else if (type == 4) {
  2662. var _tmp = this.unitJson[this.unitIndex].chapterInfo[0].fileList1;
  2663. } else {
  2664. var _tmp =
  2665. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  2666. .homeworkList;
  2667. }
  2668. this.noneBtnImg = _tmp.length >= 1;
  2669. },
  2670. goTo(path) {
  2671. this.$router.push(path);
  2672. },
  2673. guid() {
  2674. var _num,
  2675. i,
  2676. _guid = "";
  2677. for (i = 0; i < 32; i++) {
  2678. _guid += Math.floor(Math.random() * 16).toString(16); //随机0 - 16 的数字 转变为16进制的字符串
  2679. _num = Math.floor((i - 7) / 4); //计算 (i-7)除4
  2680. if (_num > -1 && _num < 4 && i == 7 + 4 * _num) {
  2681. //会使guid中间加 "-" 形式为xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
  2682. _guid += "-";
  2683. }
  2684. }
  2685. return _guid;
  2686. },
  2687. lastSteps() {
  2688. if (this.steps == 4) {
  2689. this.goTo(
  2690. "/course?userid=" +
  2691. this.userid +
  2692. "&oid=" +
  2693. this.oid +
  2694. "&org=" +
  2695. this.org
  2696. );
  2697. } else {
  2698. if (this.cidType == 0) {
  2699. this.steps--;
  2700. if (this.steps == 1) {
  2701. setTimeout(() => {
  2702. this.checkEva(this.checkId);
  2703. }, 0);
  2704. }
  2705. } else {
  2706. if (this.steps == 3) {
  2707. this.steps = 1;
  2708. setTimeout(() => {
  2709. this.checkEva(this.checkId);
  2710. }, 0);
  2711. }
  2712. }
  2713. }
  2714. },
  2715. navSteps(s) {
  2716. if (this.courseName == "") {
  2717. this.$message.error("请将信息填写完整");
  2718. return;
  2719. }
  2720. if (this.cidType == 0) {
  2721. if (this.steps == 1) {
  2722. if (this.cid == "" || this.cid == undefined) {
  2723. this.addWork();
  2724. } else {
  2725. if (this.userid != this.courseUserid) {
  2726. // this.updateWork2();
  2727. } else {
  2728. this.updateWork();
  2729. }
  2730. }
  2731. }
  2732. if (s == 1) {
  2733. this.steps = 1;
  2734. setTimeout(() => {
  2735. this.checkEva(this.checkId);
  2736. }, 0);
  2737. }
  2738. if (s == 2) {
  2739. this.steps = 2;
  2740. }
  2741. if (s == 3) {
  2742. this.cTemplate = this.templateC.content;
  2743. this.dialogVisible2 = false;
  2744. this.steps = 3;
  2745. setTimeout(() => {
  2746. this.checkEva(this.checkId);
  2747. }, 1000);
  2748. }
  2749. } else {
  2750. if (this.steps == 1) {
  2751. if (this.cid == "" || this.cid == undefined) {
  2752. this.addWork();
  2753. } else {
  2754. if (this.userid != this.courseUserid) {
  2755. // this.updateWork2();
  2756. } else {
  2757. this.updateWork();
  2758. }
  2759. }
  2760. }
  2761. if (s == 1) {
  2762. this.steps = 1;
  2763. setTimeout(() => {
  2764. this.checkEva(this.checkId);
  2765. }, 0);
  2766. }
  2767. if (s == 3) {
  2768. this.cTemplate = this.templateC.content;
  2769. this.dialogVisible2 = false;
  2770. this.steps = 3;
  2771. setTimeout(() => {
  2772. this.checkEva(this.checkId);
  2773. }, 1000);
  2774. }
  2775. }
  2776. this.$refs.stepBox.scrollTop = 0;
  2777. },
  2778. nextSteps() {
  2779. if (this.cidType == 1) {
  2780. if (this.steps == 1) {
  2781. if (this.courseName != "") {
  2782. this.steps = 3;
  2783. setTimeout(() => {
  2784. this.checkEva(this.checkId);
  2785. }, 1000);
  2786. if (this.cid == "" || this.cid == undefined) {
  2787. this.addWork();
  2788. } else {
  2789. if (this.userid != this.courseUserid) {
  2790. // this.updateWork2();
  2791. } else {
  2792. this.updateWork();
  2793. }
  2794. }
  2795. } else {
  2796. this.$message.error("请将信息填写完整");
  2797. return;
  2798. }
  2799. } else if (this.steps == 3) {
  2800. if (this.cid == "" || this.cid == undefined) {
  2801. if (this.courseName == "") {
  2802. this.$message.error("请将信息填写完整");
  2803. return;
  2804. } else {
  2805. this.addWork();
  2806. this.steps++;
  2807. }
  2808. } else {
  2809. if (this.courseName == "") {
  2810. this.$message.error("请将信息填写完整");
  2811. return;
  2812. } else {
  2813. if (this.userid != this.courseUserid) {
  2814. this.updateWork2();
  2815. } else {
  2816. this.updateWork();
  2817. }
  2818. this.steps++;
  2819. }
  2820. }
  2821. }
  2822. } else {
  2823. if (this.steps == 1) {
  2824. if (this.courseName != "") {
  2825. if (this.cid == "" || this.cid == undefined) {
  2826. this.addWork();
  2827. } else {
  2828. if (this.userid != this.courseUserid) {
  2829. // this.updateWork2();
  2830. } else {
  2831. this.updateWork();
  2832. }
  2833. }
  2834. this.steps++;
  2835. } else {
  2836. this.$message.error("请将信息填写完整");
  2837. return;
  2838. }
  2839. } else if (this.steps == 2) {
  2840. if (this.templateC.id != "" || this.templateC.id != undefined) {
  2841. this.cTemplate = this.templateC.content;
  2842. }
  2843. this.dialogVisible2 = false;
  2844. this.steps++;
  2845. setTimeout(() => {
  2846. this.checkEva(this.checkId);
  2847. }, 1000);
  2848. } else if (this.steps == 3) {
  2849. if (this.cid == "" || this.cid == undefined) {
  2850. if (this.courseName == "") {
  2851. this.$message.error("请将信息填写完整");
  2852. return;
  2853. } else {
  2854. this.addWork();
  2855. this.steps++;
  2856. }
  2857. } else {
  2858. if (this.courseName == "") {
  2859. this.$message.error("请将信息填写完整");
  2860. return;
  2861. } else {
  2862. if (this.userid != this.courseUserid) {
  2863. this.updateWork2();
  2864. } else {
  2865. this.updateWork();
  2866. }
  2867. this.steps++;
  2868. }
  2869. }
  2870. }
  2871. }
  2872. this.$refs.stepBox.scrollTop = 0;
  2873. },
  2874. unitSet(i) {
  2875. this.unitIndex = i;
  2876. // this.$refs.rightboxR.scrollTop = 0;
  2877. },
  2878. time() {
  2879. if (!this.now) {
  2880. this.now = new Date().getTime();
  2881. return true;
  2882. } else {
  2883. let time = new Date().getTime();
  2884. if (time - this.now > 3000) {
  2885. this.now = time;
  2886. return true;
  2887. } else {
  2888. return false;
  2889. }
  2890. }
  2891. },
  2892. deleteUnit(i) {
  2893. var _this = this;
  2894. if (_this.time()) {
  2895. _this
  2896. .$confirm("确定删除此单元吗?", "提示", {
  2897. confirmButtonText: "确定",
  2898. cancelButtonText: "取消",
  2899. type: "warning",
  2900. })
  2901. .then(() => {
  2902. _this.isDelete = 2;
  2903. // _this.unitIndex = _this.unitIndex - 1;
  2904. _this.deleteWork(_this.unitJson[i].chapterInfo[0].chapterid);
  2905. // _this.$message.success("删除成功");
  2906. })
  2907. .catch(() => {
  2908. return;
  2909. });
  2910. }
  2911. },
  2912. deleteWork(chapid) {
  2913. let params = [
  2914. {
  2915. cid: this.cid,
  2916. chapters: JSON.stringify(this.unitJson),
  2917. uid: this.userid,
  2918. chapid: chapid,
  2919. },
  2920. ];
  2921. this.ajax
  2922. .post(this.$store.state.api + "deleteWork", params)
  2923. .then((res) => {
  2924. this.$message({
  2925. message: "删除成功",
  2926. type: "success",
  2927. });
  2928. this.unitJson.splice(this.unitIndex, 1);
  2929. this.unitIndex = this.unitIndex - 1;
  2930. })
  2931. .catch((err) => {
  2932. this.$message.error("网络不佳");
  2933. console.error(err);
  2934. });
  2935. },
  2936. deleteTool(itemTaskIndex, i) {
  2937. var _this = this;
  2938. if (_this.time()) {
  2939. _this
  2940. .$confirm("确定删除此工具吗?", "提示", {
  2941. confirmButtonText: "确定",
  2942. cancelButtonText: "取消",
  2943. type: "warning",
  2944. })
  2945. .then(() => {
  2946. _this.unitJson[_this.unitIndex].chapterInfo[0].taskJson[
  2947. itemTaskIndex
  2948. ].toolChoose.splice(i, 1);
  2949. _this.$message.success("删除成功");
  2950. })
  2951. .catch(() => {
  2952. return;
  2953. });
  2954. }
  2955. },
  2956. deleteSentence(i) {
  2957. var _this = this;
  2958. if (_this.time()) {
  2959. _this
  2960. .$confirm("确定删除此题目吗?", "提示", {
  2961. confirmButtonText: "确定",
  2962. cancelButtonText: "取消",
  2963. type: "warning",
  2964. })
  2965. .then(() => {
  2966. _this.sentenceList.splice(i, 1);
  2967. _this.$message.success("删除成功");
  2968. })
  2969. .catch(() => {
  2970. return;
  2971. });
  2972. }
  2973. },
  2974. deleteS(s, i, j) {
  2975. this.sentenceList[i].addSentence.splice(j, 1);
  2976. if (this.sentenceList[i].rightAnswer.indexOf(s) != -1) {
  2977. var a = this.sentenceList[i].rightAnswer.indexOf(s);
  2978. this.sentenceList[i].rightAnswer.splice(a, 1);
  2979. }
  2980. },
  2981. openT() {
  2982. window.parent.postMessage({ tools: "25" }, "*");
  2983. },
  2984. deleteTask(i) {
  2985. var _this = this;
  2986. if (_this.time()) {
  2987. _this
  2988. .$confirm("确定删除此任务吗?", "提示", {
  2989. confirmButtonText: "确定",
  2990. cancelButtonText: "取消",
  2991. type: "warning",
  2992. })
  2993. .then(() => {
  2994. _this.unitJson[_this.unitIndex].chapterInfo[0].taskJson.splice(
  2995. i,
  2996. 1
  2997. );
  2998. _this.$message.success("删除成功");
  2999. })
  3000. .catch(() => {
  3001. return;
  3002. });
  3003. }
  3004. },
  3005. handlePictureCardPreview(file) {
  3006. this.dialogImageUrl = file.url;
  3007. },
  3008. clean(i, c) {
  3009. this.unitJson[this.unitIndex].chapterInfo[i].fileList1.splice(c, 1);
  3010. },
  3011. handle_remove1(file, fileList, type) {
  3012. var _tmp = this.cover;
  3013. for (var i = 0, len = _tmp.length; i < len; i++) {
  3014. if (_tmp[i].uid == file.uid) {
  3015. _tmp.splice(i, 1);
  3016. break;
  3017. }
  3018. this.cover = _tmp;
  3019. }
  3020. this.noneBtnImg = _tmp.length >= 1;
  3021. this.isSysPic = false;
  3022. },
  3023. addImg(e) {
  3024. var el = e.currentTarget;
  3025. el.getElementsByTagName("input")[0].click();
  3026. },
  3027. addChaptersTools(i) {
  3028. this.chapTools = [
  3029. {
  3030. tools: [],
  3031. toolDetail: "",
  3032. },
  3033. ];
  3034. this.chapCount = i;
  3035. this.dialogVisible4 = true;
  3036. },
  3037. isNoFinsh() {
  3038. this.$message.warning("功能正在开发中");
  3039. },
  3040. addAttText(i) {
  3041. this.AttText = {
  3042. title: "",
  3043. text: "",
  3044. };
  3045. this.taskCount = i;
  3046. this.AttTextType = 0;
  3047. this.$forceUpdate();
  3048. this.dialogVisible6 = true;
  3049. },
  3050. openLine(i) {
  3051. this.line = "";
  3052. this.lineCount = i;
  3053. this.lineType = 0;
  3054. this.$forceUpdate();
  3055. this.dialogVisible7 = true;
  3056. },
  3057. beforeUploadTi(event, i, j) {
  3058. console.log(event)
  3059. const loading = this.openLoading();
  3060. var file = event.target.files[0];
  3061. var credentials = {
  3062. accessKeyId: "AKIATLPEDU37QV5CHLMH",
  3063. secretAccessKey: "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",
  3064. }; //秘钥形式的登录上传
  3065. window.AWS.config.update(credentials);
  3066. window.AWS.config.region = "cn-northwest-1"; //设置区域
  3067. var bucket = new window.AWS.S3({ params: { Bucket: "ccrb" } }); //选择桶
  3068. var _this = this;
  3069. if (file) {
  3070. var params = {
  3071. Key:
  3072. file.name.split(".")[0] +
  3073. new Date().getTime() +
  3074. "." +
  3075. file.name.split(".")[file.name.split(".").length - 1],
  3076. ContentType: file.type,
  3077. Body: file,
  3078. "Access-Control-Allow-Credentials": "*",
  3079. ACL: "public-read",
  3080. }; //key可以设置为桶的相抵路径,Body为文件, ACL最好要设置
  3081. var options = {
  3082. partSize: 2048 * 1024 * 1024,
  3083. queueSize: 2,
  3084. leavePartsOnError: true,
  3085. };
  3086. bucket
  3087. .upload(params, options)
  3088. .on("httpUploadProgress", function (evt) {
  3089. //这里可以写进度条
  3090. // console.log("Uploaded : " + parseInt((evt.loaded * 80) / evt.total) + '%');
  3091. })
  3092. .send(function (err, data) {
  3093. loading.close();
  3094. if (err) {
  3095. _this.$message.error("上传失败");
  3096. } else {
  3097. _this.testJson.testJson[i].checkList[j] = {};
  3098. _this.testJson.testJson[i].checkList[j].src = data.Location;
  3099. _this.testJson.testJson[i].checkList[j].imgType = 1;
  3100. _this.imgChange2(i, j);
  3101. }
  3102. });
  3103. }
  3104. },
  3105. beforeUpload1(event, type) {
  3106. const loading = this.openLoading();
  3107. var file = event.target.files[0];
  3108. var credentials = {
  3109. accessKeyId: "AKIATLPEDU37QV5CHLMH",
  3110. secretAccessKey: "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",
  3111. }; //秘钥形式的登录上传
  3112. window.AWS.config.update(credentials);
  3113. window.AWS.config.region = "cn-northwest-1"; //设置区域
  3114. var bucket = new window.AWS.S3({ params: { Bucket: "ccrb" } }); //选择桶
  3115. var _this = this;
  3116. if (file) {
  3117. var params = {
  3118. Key:
  3119. file.name.split(".")[0] +
  3120. new Date().getTime() +
  3121. "." +
  3122. file.name.split(".")[file.name.split(".").length - 1],
  3123. ContentType: file.type,
  3124. Body: file,
  3125. "Access-Control-Allow-Credentials": "*",
  3126. ACL: "public-read",
  3127. }; //key可以设置为桶的相抵路径,Body为文件, ACL最好要设置
  3128. var options = {
  3129. partSize: 2048 * 1024 * 1024,
  3130. queueSize: 2,
  3131. leavePartsOnError: true,
  3132. };
  3133. bucket
  3134. .upload(params, options)
  3135. .on("httpUploadProgress", function (evt) {
  3136. //这里可以写进度条
  3137. // console.log("Uploaded : " + parseInt((evt.loaded * 80) / evt.total) + '%');
  3138. })
  3139. .send(function (err, data) {
  3140. loading.close();
  3141. if (err) {
  3142. var a = _this.$refs.upload1.uploadFiles;
  3143. a.splice(a.length - 1, a.length);
  3144. _this.$message.error("上传失败");
  3145. } else {
  3146. _this.cover.push({
  3147. name: file.name,
  3148. url: data.Location,
  3149. uid: file.uid,
  3150. });
  3151. _this.imgChange1(null, null, 1, null);
  3152. _this.choosePicVisible = false;
  3153. console.log(data.Location);
  3154. }
  3155. });
  3156. }
  3157. },
  3158. beforeUploadSelect(event, type) {
  3159. const loading = this.openLoading();
  3160. var file = event.target.files[0];
  3161. var credentials = {
  3162. accessKeyId: "AKIATLPEDU37QV5CHLMH",
  3163. secretAccessKey: "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",
  3164. }; //秘钥形式的登录上传
  3165. window.AWS.config.update(credentials);
  3166. window.AWS.config.region = "cn-northwest-1"; //设置区域
  3167. var bucket = new window.AWS.S3({ params: { Bucket: "ccrb" } }); //选择桶
  3168. var _this = this;
  3169. if (file) {
  3170. var params = {
  3171. Key:
  3172. file.name.split(".")[0] +
  3173. new Date().getTime() +
  3174. "." +
  3175. file.name.split(".")[file.name.split(".").length - 1],
  3176. ContentType: file.type,
  3177. Body: file,
  3178. "Access-Control-Allow-Credentials": "*",
  3179. ACL: "public-read",
  3180. }; //key可以设置为桶的相抵路径,Body为文件, ACL最好要设置
  3181. var options = {
  3182. partSize: 2048 * 1024 * 1024,
  3183. queueSize: 2,
  3184. leavePartsOnError: true,
  3185. };
  3186. bucket
  3187. .upload(params, options)
  3188. .on("httpUploadProgress", function (evt) {
  3189. //这里可以写进度条
  3190. // console.log("Uploaded : " + parseInt((evt.loaded * 80) / evt.total) + '%');
  3191. })
  3192. .send(function (err, data) {
  3193. loading.close();
  3194. if (err) {
  3195. _this.$message.error("上传失败");
  3196. } else {
  3197. _this.selectJson.url = data.Location;
  3198. console.log(data.Location);
  3199. }
  3200. });
  3201. }
  3202. },
  3203. chooseSysPic(p) {
  3204. this.cover.push({
  3205. name: "系统图片.png",
  3206. url: p,
  3207. });
  3208. this.imgChange1(null, null, 1, null);
  3209. this.isSysPic = true;
  3210. this.sysPicVisible = false;
  3211. },
  3212. beforeUpload(data) {
  3213. this.$refs.upload1.uploadFiles;
  3214. this.uploadLoading1 = true;
  3215. var file = data.file;
  3216. var credentials = {
  3217. accessKeyId: "AKIATLPEDU37QV5CHLMH",
  3218. secretAccessKey: "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",
  3219. }; //秘钥形式的登录上传
  3220. window.AWS.config.update(credentials);
  3221. window.AWS.config.region = "cn-northwest-1"; //设置区域
  3222. var bucket = new window.AWS.S3({ params: { Bucket: "ccrb" } }); //选择桶
  3223. var _this = this;
  3224. if (file) {
  3225. var params = {
  3226. Key:
  3227. file.name.split(".")[0] +
  3228. new Date().getTime() +
  3229. "." +
  3230. file.name.split(".")[file.name.split(".").length - 1],
  3231. ContentType: file.type,
  3232. Body: file,
  3233. "Access-Control-Allow-Credentials": "*",
  3234. ACL: "public-read",
  3235. }; //key可以设置为桶的相抵路径,Body为文件, ACL最好要设置
  3236. var options = {
  3237. partSize: 2048 * 1024 * 1024,
  3238. queueSize: 2,
  3239. leavePartsOnError: true,
  3240. };
  3241. bucket
  3242. .upload(params, options)
  3243. .on("httpUploadProgress", function (evt) {
  3244. //这里可以写进度条
  3245. // console.log("Uploaded : " + parseInt((evt.loaded * 80) / evt.total) + '%');
  3246. })
  3247. .send(function (err, data) {
  3248. _this.uploadLoading1 = false;
  3249. if (err) {
  3250. var a = _this.$refs.upload1.uploadFiles;
  3251. a.splice(a.length - 1, a.length);
  3252. _this.$message.error("上传失败");
  3253. } else {
  3254. //上传成功处理
  3255. _this.unitJson[_this.unitIndex].chapterInfo[0].fileList1.push({
  3256. name: file.name,
  3257. url: data.Location,
  3258. uid: file.uid,
  3259. });
  3260. _this.imgChange();
  3261. console.log(data.Location);
  3262. }
  3263. });
  3264. }
  3265. },
  3266. onExceed() {
  3267. this.$message.error("项目封面仅支持上传一张,请删除后再进行上传");
  3268. },
  3269. beforeUpload2(event, unitIndex, type, itemTaskIndex) {
  3270. // const loading = this.openLoading();
  3271. var file = event.target.files[0];
  3272. var credentials = {
  3273. accessKeyId: "AKIATLPEDU37QV5CHLMH",
  3274. secretAccessKey: "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",
  3275. }; //秘钥形式的登录上传
  3276. window.AWS.config.update(credentials);
  3277. window.AWS.config.region = "cn-northwest-1"; //设置区域
  3278. var bucket = new window.AWS.S3({ params: { Bucket: "ccrb" } }); //选择桶
  3279. var _this = this;
  3280. if (type == 3) {
  3281. var b = [
  3282. "DOC",
  3283. "DOCX",
  3284. "DOCM",
  3285. "DOTM",
  3286. "DOTX",
  3287. "PPTX",
  3288. "PPSX",
  3289. "PPT",
  3290. "PPS",
  3291. "PPTM",
  3292. "POTM",
  3293. "PPAM",
  3294. "POTX",
  3295. "PPSM",
  3296. ];
  3297. if (
  3298. b.indexOf(
  3299. file.name
  3300. .split(".")
  3301. [file.name.split(".").length - 1].toLocaleUpperCase()
  3302. ) != -1
  3303. ) {
  3304. if (file.size / 1024 / 1024 > 10) {
  3305. this.$message.error("上传文件大于10兆,请重新选择文件!");
  3306. this.inputShow = true;
  3307. var a = _this.$refs.upload1.uploadFiles;
  3308. a.splice(a.length - 1, a.length);
  3309. // loading.close();
  3310. return;
  3311. }
  3312. } else if (
  3313. file.name
  3314. .split(".")
  3315. [file.name.split(".").length - 1].toLocaleUpperCase() != "PDF"
  3316. ) {
  3317. if (file.size / 1024 / 1024 > 5) {
  3318. this.$message.error("添加成上传文件大于5兆,请重新选择文件!");
  3319. this.inputShow = true;
  3320. var a = _this.$refs.upload1.uploadFiles;
  3321. a.splice(a.length - 1, a.length);
  3322. // loading.close();
  3323. return;
  3324. }
  3325. }
  3326. }
  3327. this.inputShow = false;
  3328. _this.unitJson[unitIndex].chapterInfo[0].taskJson[
  3329. itemTaskIndex
  3330. ].progress = 0;
  3331. _this.unitJson[unitIndex].chapterInfo[0].taskJson[
  3332. itemTaskIndex
  3333. ].proVisible = true;
  3334. if (file) {
  3335. var params = {
  3336. Key:
  3337. file.name.split(".")[0] +
  3338. new Date().getTime() +
  3339. "." +
  3340. file.name.split(".")[file.name.split(".").length - 1],
  3341. ContentType: file.type,
  3342. Body: file,
  3343. "Access-Control-Allow-Credentials": "*",
  3344. ACL: "public-read",
  3345. }; //key可以设置为桶的相抵路径,Body为文件, ACL最好要设置
  3346. var options = {
  3347. partSize: 2048 * 1024 * 1024,
  3348. queueSize: 2,
  3349. leavePartsOnError: true,
  3350. };
  3351. bucket
  3352. .upload(params, options)
  3353. .on("httpUploadProgress", function (evt) {
  3354. //这里可以写进度条
  3355. // console.log("Uploaded : " + parseInt((evt.loaded * 80) / evt.total) + '%');
  3356. _this.unitJson[unitIndex].chapterInfo[0].taskJson[
  3357. itemTaskIndex
  3358. ].progress = parseInt((evt.loaded * 80) / evt.total);
  3359. })
  3360. .send(function (err, data) {
  3361. // loading.close();
  3362. _this.unitJson[unitIndex].chapterInfo[0].taskJson[
  3363. itemTaskIndex
  3364. ].progress = 100;
  3365. setTimeout(() => {
  3366. _this.unitJson[unitIndex].chapterInfo[0].taskJson[
  3367. itemTaskIndex
  3368. ].proVisible = false;
  3369. _this.$forceUpdate();
  3370. }, 1000);
  3371. _this.inputShow = true;
  3372. if (err) {
  3373. var a = _this.$refs.upload1.uploadFiles;
  3374. a.splice(a.length - 1, a.length);
  3375. _this.$message.error("上传失败");
  3376. } else {
  3377. if (type == 2 || type == 3) {
  3378. _this.unitJson[unitIndex].chapterInfo[0].taskJson[
  3379. itemTaskIndex
  3380. ].chapterData.push({
  3381. name: file.name,
  3382. url: data.Location,
  3383. uid: file.uid,
  3384. type: type,
  3385. });
  3386. _this.imgChange1(null, null, type, itemTaskIndex);
  3387. } else if (type == 4) {
  3388. _this.unitJson[_this.unitIndex].chapterInfo[0].taskJson[
  3389. itemTaskIndex
  3390. ].fileList1.push({
  3391. name: file.name,
  3392. url: data.Location,
  3393. uid: file.uid,
  3394. });
  3395. _this.imgChange1(null, null, type, itemTaskIndex);
  3396. } else if (type == 5) {
  3397. _this.unitJson[_this.unitIndex].chapterInfo[0].taskJson[
  3398. itemTaskIndex
  3399. ].homeworkList.push({
  3400. name: file.name,
  3401. url: data.Location,
  3402. uid: file.uid,
  3403. });
  3404. _this.imgChange1(null, null, type, itemTaskIndex);
  3405. }
  3406. console.log(data.Location);
  3407. }
  3408. });
  3409. }
  3410. },
  3411. addunit() {
  3412. this.unitJson.push({
  3413. dyName: "", //单元标题
  3414. isUpdate: 1,
  3415. chapterInfo: [
  3416. {
  3417. isread: false,
  3418. chapterid: this.guid(),
  3419. title: "",
  3420. courseName: "",
  3421. taskJson: [
  3422. {
  3423. task: "",
  3424. taskDetail: "",
  3425. chapterData: [],
  3426. toolText: "",
  3427. toolChoose: [
  3428. {
  3429. tool: [],
  3430. toolDetail: "",
  3431. toolType: 0,
  3432. askCount: 1,
  3433. askTitle: "",
  3434. askJson: [{ askstitle: "", askItem: 1, checkList: [] }],
  3435. },
  3436. ],
  3437. isShowTools: false,
  3438. askCount: 1,
  3439. isFold: 0,
  3440. askTitle: "",
  3441. askJson: [{ askstitle: "", askItem: 1, checkList: [] }],
  3442. checkJson: [{ checkCount: [], checkPerent: [] }],
  3443. homeworkList: [],
  3444. },
  3445. ],
  3446. itemCount: 1,
  3447. fileList1: [],
  3448. video: [],
  3449. testData: [],
  3450. pData: [],
  3451. templateArray: [],
  3452. },
  3453. ],
  3454. });
  3455. this.addindex = this.unitJson.length - 1;
  3456. setTimeout(() => {
  3457. this.unitIndex = this.unitJson.length - 1;
  3458. this.unitSet(this.unitIndex);
  3459. }, 0);
  3460. },
  3461. addToolFun(itemTaskIndex) {
  3462. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  3463. itemTaskIndex
  3464. ].toolChoose.push({
  3465. tool: [],
  3466. toolDetail: "",
  3467. toolType: 0,
  3468. askCount: 1,
  3469. askTitle: "",
  3470. askJson: [{ askstitle: "", askItem: 1, checkList: [] }],
  3471. });
  3472. },
  3473. addTaskBorder() {
  3474. this.unitJson[this.unitIndex].chapterInfo[0].taskJson.push({
  3475. task: "",
  3476. taskDetail: "",
  3477. chapterData: [],
  3478. toolText: "",
  3479. toolChoose: [
  3480. {
  3481. tool: [],
  3482. toolDetail: "",
  3483. toolType: 0,
  3484. askCount: 1,
  3485. askTitle: "",
  3486. askJson: [{ askstitle: "", askItem: 1, checkList: [] }],
  3487. },
  3488. ],
  3489. isShowTools: false,
  3490. askCount: 1,
  3491. isFold: 0,
  3492. askTitle: "",
  3493. askJson: [{ askstitle: "", askItem: 1, checkList: [] }],
  3494. checkJson: [{ checkCount: [], checkPerent: [] }],
  3495. homeworkList: [],
  3496. });
  3497. },
  3498. add(e, i) {
  3499. var el = e.currentTarget;
  3500. el.getElementsByTagName("input")[0].click();
  3501. },
  3502. fold(i, e, type) {
  3503. var a = e.currentTarget.parentElement.parentElement;
  3504. var b = e.currentTarget.parentElement;
  3505. if (type == 1) {
  3506. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[i].isFold = 1;
  3507. a.className += " smallTaskBorder";
  3508. b.className += " funBlockTop";
  3509. } else {
  3510. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[i].isFold = 0;
  3511. a.className = "taskBorder";
  3512. b.className = "funBlock";
  3513. }
  3514. console.log(e);
  3515. },
  3516. deleteHomeworkBox(unitIndex, index, i) {
  3517. this.unitJson[unitIndex].chapterInfo[index].taskJson[
  3518. this.taskCount
  3519. ].homeworkList.splice(i, 1);
  3520. },
  3521. getStudent() {
  3522. let params = {
  3523. oid: this.oid,
  3524. cu: "",
  3525. cn: this.searchPeople,
  3526. };
  3527. this.ajax
  3528. .get(this.$store.state.api + "selectStudentAdd", params)
  3529. .then((res) => {
  3530. this.studentJuri = res.data[0];
  3531. })
  3532. .catch((err) => {
  3533. this.isLoading = false;
  3534. console.error(err);
  3535. });
  3536. },
  3537. getTeacher() {
  3538. let params = {
  3539. oid:
  3540. this.org && this.org != "undefined" && this.org != "null"
  3541. ? this.org
  3542. : this.oid,
  3543. cu: "",
  3544. cn: this.searchTN,
  3545. };
  3546. this.ajax
  3547. .get(
  3548. this.$store.state.api +
  3549. (this.org && this.org != "undefined" && this.org != "null"
  3550. ? "selectTeacherAddOrg"
  3551. : "selectTeacherAdd"),
  3552. params
  3553. )
  3554. .then((res) => {
  3555. let teacherJuri = res.data[0];
  3556. for (var i = 0; i < teacherJuri.length; i++) {
  3557. if (teacherJuri[i].userid == this.userid) {
  3558. teacherJuri.splice(i, 1);
  3559. break;
  3560. }
  3561. }
  3562. this.teacherJuri = teacherJuri;
  3563. })
  3564. .catch((err) => {
  3565. console.error(err);
  3566. });
  3567. },
  3568. searchStudent() {
  3569. this.getStudent();
  3570. },
  3571. //获取班级列表
  3572. getClass() {
  3573. let params = {
  3574. oid: this.oid,
  3575. };
  3576. this.ajax
  3577. .get(this.$store.state.api + "selectClassBySchool", params)
  3578. .then((res) => {
  3579. this.grade = res.data[0];
  3580. this.classJuri = res.data[0];
  3581. })
  3582. .catch((err) => {
  3583. this.isLoading = false;
  3584. console.error(err);
  3585. });
  3586. },
  3587. getChapterData(e, i, j, ic, type) {
  3588. e.stopPropagation();
  3589. this.updataC = true;
  3590. this.icc = ic;
  3591. if ((type == 2 || type == 3) && e.target.tagName !== "INPUT") {
  3592. console.log("还不能下载图片喔");
  3593. }
  3594. },
  3595. deleteChapterData(e, i, j, ic, taskI) {
  3596. e.stopPropagation();
  3597. this.unitJson[i].chapterInfo[j].taskJson[taskI].chapterData.splice(ic, 1);
  3598. },
  3599. updataVideoT(e, i, j, ic) {
  3600. e.stopPropagation();
  3601. this.unitJson[i].chapterInfo[j].taskJson[this.taskCount].chapterData[
  3602. ic
  3603. ].name = e.target.value;
  3604. },
  3605. upCd(e, i, j, ic) {
  3606. e.stopPropagation();
  3607. if (ic == 0) {
  3608. return;
  3609. }
  3610. var a =
  3611. this.unitJson[i].chapterInfo[j].taskJson[this.taskCount].chapterData[
  3612. ic - 1
  3613. ];
  3614. this.unitJson[i].chapterInfo[j].taskJson[this.taskCount].chapterData[
  3615. ic - 1
  3616. ] =
  3617. this.unitJson[i].chapterInfo[j].taskJson[this.taskCount].chapterData[
  3618. ic
  3619. ];
  3620. this.unitJson[i].chapterInfo[j].taskJson[this.taskCount].chapterData[ic] =
  3621. a;
  3622. },
  3623. downCd(e, i, j, ic) {
  3624. e.stopPropagation();
  3625. if (ic == this.unitJson[i].chapterInfo[j].chapterData.length - 1) {
  3626. return;
  3627. }
  3628. var a =
  3629. this.unitJson[i].chapterInfo[j].taskJson[this.taskCount].chapterData[
  3630. ic + 1
  3631. ];
  3632. this.unitJson[i].chapterInfo[j].taskJson[this.taskCount].chapterData[
  3633. ic + 1
  3634. ] =
  3635. this.unitJson[i].chapterInfo[j].taskJson[this.taskCount].chapterData[
  3636. ic
  3637. ];
  3638. this.unitJson[i].chapterInfo[j].taskJson[this.taskCount].chapterData[ic] =
  3639. a;
  3640. },
  3641. addWork() {
  3642. let cPan = 1;
  3643. for (var i = 0; i < this.unitJson.length; i++) {
  3644. for (
  3645. var j = 0;
  3646. j < this.unitJson[i].chapterInfo[0].taskJson.length;
  3647. j++
  3648. ) {
  3649. if (
  3650. this.unitJson[i].chapterInfo[0].taskJson[j].toolChoose.length > 1
  3651. ) {
  3652. for (
  3653. var z = 0;
  3654. z < this.unitJson[i].chapterInfo[0].taskJson[j].toolChoose.length;
  3655. z++
  3656. ) {
  3657. if (
  3658. !this.unitJson[i].chapterInfo[0].taskJson[j].toolChoose[z].tool
  3659. .length
  3660. ) {
  3661. this.$message.error("请把工具添加完整");
  3662. cPan = 2;
  3663. break;
  3664. }
  3665. }
  3666. }
  3667. if (this.unitJson[i].chapterInfo[0].taskJson[j].eList) {
  3668. this.unitJson[i].chapterInfo[0].taskJson[j].eList = this.unitJson[
  3669. i
  3670. ].chapterInfo[0].taskJson[j].eList.filter((ele) => {
  3671. return ele.value != "";
  3672. });
  3673. }
  3674. }
  3675. }
  3676. if (cPan == 2) {
  3677. this.steps--;
  3678. return;
  3679. }
  3680. for (var i = 0; i < this.unitJson.length; i++) {
  3681. delete this.unitJson[i].isUpdate;
  3682. }
  3683. let params = [
  3684. {
  3685. uid: this.userid,
  3686. title: this.courseName.replace(/%/g, "%25"),
  3687. brief: this.courseText.replace(/%/g, "%25"),
  3688. cover:
  3689. this.cover.length > 0
  3690. ? JSON.stringify(this.cover)
  3691. : JSON.stringify([
  3692. {
  3693. name: "noBanner.jpg",
  3694. url: "https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/wu1676621845022.png",
  3695. uid: 1656409780264,
  3696. status: "success",
  3697. },
  3698. ]),
  3699. evaId: this.evalua,
  3700. astudent:
  3701. this.checkboxList2.length > 0 ? this.checkboxList2.join(",") : "",
  3702. see: this.isTeacherSee == true ? 1 : 0,
  3703. chapters: JSON.stringify(this.unitJson).replaceAll(/%/g, "%25"),
  3704. template: this.cTemplate != "undefined" ? this.cTemplate : "",
  3705. courseType: JSON.stringify(this.courseTypeId),
  3706. ateacher:
  3707. this.checkboxList3.length > 0 ? this.checkboxList3.join(",") : "",
  3708. },
  3709. ];
  3710. this.ajax
  3711. .post(this.$store.state.api + "addWorkNew2", params)
  3712. .then((res) => {
  3713. console.log(this.steps);
  3714. if (this.steps != 1 && this.steps != 2 && this.steps != 3) {
  3715. this.$message({
  3716. message: "新增成功",
  3717. type: "success",
  3718. });
  3719. }
  3720. this.number = res.data.ordernumber;
  3721. this.courseId = res.data.courseId;
  3722. this.cid = res.data.courseId;
  3723. this.courseUserid = this.userid;
  3724. this.islogin = true;
  3725. })
  3726. .catch((err) => {
  3727. this.$message.error("网络不佳");
  3728. console.error(err);
  3729. });
  3730. },
  3731. goCourse() {
  3732. window.parent.postMessage({ cid: this.courseId, type: "1" }, "*");
  3733. },
  3734. updateWork2() {
  3735. let _unitIndex = this.unitIndex;
  3736. let cPan = 1;
  3737. for (
  3738. var j = 0;
  3739. j < this.unitJson[_unitIndex].chapterInfo[0].taskJson.length;
  3740. j++
  3741. ) {
  3742. if (
  3743. this.unitJson[_unitIndex].chapterInfo[0].taskJson[j].toolChoose
  3744. .length > 1
  3745. ) {
  3746. for (
  3747. var z = 0;
  3748. z <
  3749. this.unitJson[_unitIndex].chapterInfo[0].taskJson[j].toolChoose
  3750. .length;
  3751. z++
  3752. ) {
  3753. if (
  3754. !this.unitJson[_unitIndex].chapterInfo[0].taskJson[j].toolChoose[
  3755. z
  3756. ].tool.length
  3757. ) {
  3758. this.$message.error("请把工具添加完整");
  3759. cPan = 2;
  3760. break;
  3761. }
  3762. }
  3763. }
  3764. if (this.unitJson[_unitIndex].chapterInfo[0].taskJson[j].eList) {
  3765. this.unitJson[_unitIndex].chapterInfo[0].taskJson[j].eList =
  3766. this.unitJson[_unitIndex].chapterInfo[0].taskJson[j].eList.filter(
  3767. (ele) => {
  3768. return ele.value != "";
  3769. }
  3770. );
  3771. }
  3772. }
  3773. if (cPan == 2) {
  3774. this.steps--;
  3775. return;
  3776. }
  3777. let params = [
  3778. {
  3779. cid: this.cid,
  3780. chapters: JSON.stringify(this.unitJson),
  3781. uid: this.userid,
  3782. unitIndex: _unitIndex,
  3783. },
  3784. ];
  3785. this.ajax
  3786. .post(this.$store.state.api + "updateWorkNew4", params)
  3787. .then((res) => {
  3788. this.$message({
  3789. message: "修改成功",
  3790. type: "success",
  3791. });
  3792. this.courseId = this.cid;
  3793. })
  3794. .catch((err) => {
  3795. this.$message.error("网络不佳");
  3796. console.error(err);
  3797. });
  3798. },
  3799. updateWork() {
  3800. let cPan = 1;
  3801. for (var i = 0; i < this.unitJson.length; i++) {
  3802. for (
  3803. var j = 0;
  3804. j < this.unitJson[i].chapterInfo[0].taskJson.length;
  3805. j++
  3806. ) {
  3807. if (
  3808. this.unitJson[i].chapterInfo[0].taskJson[j].toolChoose.length > 1
  3809. ) {
  3810. for (
  3811. var z = 0;
  3812. z < this.unitJson[i].chapterInfo[0].taskJson[j].toolChoose.length;
  3813. z++
  3814. ) {
  3815. if (
  3816. !this.unitJson[i].chapterInfo[0].taskJson[j].toolChoose[z].tool
  3817. .length
  3818. ) {
  3819. this.$message.error("请把工具添加完整");
  3820. cPan = 2;
  3821. break;
  3822. }
  3823. }
  3824. }
  3825. if (this.unitJson[i].chapterInfo[0].taskJson[j].eList) {
  3826. this.unitJson[i].chapterInfo[0].taskJson[j].eList = this.unitJson[
  3827. i
  3828. ].chapterInfo[0].taskJson[j].eList.filter((ele) => {
  3829. return ele.value != "";
  3830. });
  3831. }
  3832. }
  3833. }
  3834. if (cPan == 2) {
  3835. this.steps--;
  3836. return;
  3837. }
  3838. for (var i = 0; i < this.unitJson.length; i++) {
  3839. delete this.unitJson[i].isUpdate;
  3840. }
  3841. let params = [
  3842. {
  3843. cid: this.cid,
  3844. title: this.courseName.replace(/%/g, "%25"),
  3845. brief: this.courseText.replace(/%/g, "%25"),
  3846. cover:
  3847. this.cover.length > 0
  3848. ? JSON.stringify(this.cover)
  3849. : JSON.stringify([
  3850. {
  3851. name: "noBanner.jpg",
  3852. url: "https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/wu1676621845022.png",
  3853. uid: 1656409780264,
  3854. status: "success",
  3855. },
  3856. ]),
  3857. evaId: this.evalua,
  3858. astudent:
  3859. this.checkboxList2.length > 0 ? this.checkboxList2.join(",") : "",
  3860. see: this.isTeacherSee == true ? 1 : 0,
  3861. chapters: JSON.stringify(this.unitJson).replaceAll(/%/g, "%25"),
  3862. template: this.myWord != "undefined" ? this.myWord : [],
  3863. uid: this.userid,
  3864. courseType: JSON.stringify(this.courseTypeId),
  3865. ateacher:
  3866. this.checkboxList3.length > 0 ? this.checkboxList3.join(",") : "",
  3867. },
  3868. ];
  3869. this.ajax
  3870. .post(this.$store.state.api + "updateWorkNew2", params)
  3871. .then((res) => {
  3872. if (this.steps != 1 && this.steps != 2 && this.steps != 3) {
  3873. if (this.cidType == 1) {
  3874. this.$message({
  3875. message: "修改成功",
  3876. type: "success",
  3877. });
  3878. } else {
  3879. this.$message({
  3880. message: "新增成功",
  3881. type: "success",
  3882. });
  3883. }
  3884. }
  3885. this.number = this.nbOrder;
  3886. this.courseId = this.cid;
  3887. })
  3888. .catch((err) => {
  3889. this.$message.error("网络不佳");
  3890. console.error(err);
  3891. });
  3892. },
  3893. guid() {
  3894. var _num,
  3895. i,
  3896. _guid = "";
  3897. for (i = 0; i < 32; i++) {
  3898. _guid += Math.floor(Math.random() * 16).toString(16); //随机0 - 16 的数字 转变为16进制的字符串
  3899. _num = Math.floor((i - 7) / 4); //计算 (i-7)除4
  3900. if (_num > -1 && _num < 4 && i == 7 + 4 * _num) {
  3901. //会使guid中间加 "-" 形式为xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
  3902. _guid += "-";
  3903. }
  3904. }
  3905. return _guid;
  3906. },
  3907. insertWord() {
  3908. this.dialogVisible1 = true;
  3909. this.updateBoolean2 = false;
  3910. this.tTitle = "";
  3911. this.tdetail = "";
  3912. },
  3913. addWord() {
  3914. this.unitJson[this.unitIndex].chapterInfo[0].fileList1.push({
  3915. name: this.tTitle,
  3916. content: this.tdetail,
  3917. uid: this.guid(),
  3918. });
  3919. this.dialogVisible1 = false;
  3920. },
  3921. upWord() { },
  3922. selectWord(uid, i, c) {
  3923. this.dialogVisible1 = true;
  3924. this.updateBoolean2 = true;
  3925. if (
  3926. uid == this.unitJson[this.unitIndex].chapterInfo[i].fileList1[c].uid
  3927. ) {
  3928. this.tTitle =
  3929. this.unitJson[this.unitIndex].chapterInfo[i].fileList1[c].name;
  3930. this.tdetail =
  3931. this.unitJson[this.unitIndex].chapterInfo[i].fileList1[c].content;
  3932. }
  3933. },
  3934. isAddPP() {
  3935. if (this.checkboxList.length > 0) {
  3936. this.$message({
  3937. message: "添加成功",
  3938. type: "success",
  3939. });
  3940. this.dialogVisible3 = false;
  3941. } else {
  3942. this.$message({
  3943. message: "请添加项目成员",
  3944. type: "error",
  3945. });
  3946. }
  3947. },
  3948. isAddClass() {
  3949. this.dialogVisibleClass = false;
  3950. },
  3951. isAddPPTeacher() {
  3952. this.dialogVisibleMember = false;
  3953. this.setMan();
  3954. },
  3955. getTemplate() {
  3956. this.ajax
  3957. .get(this.$store.state.api + "getCourseTemplateT", "")
  3958. .then((res) => {
  3959. this.templateArray = res.data[0];
  3960. this.$forceUpdate();
  3961. })
  3962. .catch((err) => { });
  3963. },
  3964. clearChoose() {
  3965. this.clearArray.splice(this.templateC.id, 1);
  3966. this.dialogVisible2 = false;
  3967. },
  3968. clearAttText() {
  3969. this.AttText = {
  3970. title: "",
  3971. text: "",
  3972. };
  3973. this.dialogVisible6 = false;
  3974. },
  3975. clearLine() {
  3976. this.line = "";
  3977. this.dialogVisible7 = false;
  3978. },
  3979. checkTemplate(res) {
  3980. let _this = this;
  3981. _this
  3982. .$confirm("确定选择此模板吗?", "提示", {
  3983. confirmButtonText: "确定",
  3984. cancelButtonText: "取消",
  3985. type: "warning",
  3986. })
  3987. .then(() => {
  3988. _this.unitJson = JSON.parse(res.chapters);
  3989. _this.steps++;
  3990. setTimeout(() => {
  3991. this.checkEva(this.checkId);
  3992. }, 1000);
  3993. })
  3994. .catch(() => {
  3995. return;
  3996. });
  3997. },
  3998. checkTemplate1(w) {
  3999. this.steps++;
  4000. },
  4001. checkTemplate2() {
  4002. let _this = this;
  4003. _this
  4004. .$confirm("确定选择空模板吗?", "提示", {
  4005. confirmButtonText: "确定",
  4006. cancelButtonText: "取消",
  4007. type: "warning",
  4008. })
  4009. .then(() => {
  4010. _this.unitJson = [
  4011. {
  4012. dyName: "", //单元标题
  4013. chapterInfo: [
  4014. {
  4015. isread: false,
  4016. chapterid: this.guid(),
  4017. title: "",
  4018. courseName: "",
  4019. taskJson: [
  4020. {
  4021. task: "",
  4022. taskDetail: "",
  4023. chapterData: [],
  4024. toolText: "",
  4025. toolChoose: [
  4026. {
  4027. tool: [],
  4028. toolDetail: "",
  4029. toolType: 0,
  4030. askCount: 1,
  4031. askTitle: "",
  4032. askJson: [
  4033. { askstitle: "", askItem: 1, checkList: [] },
  4034. ],
  4035. },
  4036. ],
  4037. isShowTools: false,
  4038. askCount: 1,
  4039. isFold: 0,
  4040. askTitle: "",
  4041. askJson: [{ askstitle: "", askItem: 1, checkList: [] }],
  4042. checkJson: [{ checkCount: [], checkPerent: [] }],
  4043. homeworkList: [],
  4044. },
  4045. ],
  4046. itemCount: 1,
  4047. fileList1: [],
  4048. video: [],
  4049. testData: [],
  4050. pData: [],
  4051. templateArray: [],
  4052. },
  4053. ],
  4054. },
  4055. ];
  4056. this.steps++;
  4057. })
  4058. .catch(() => {
  4059. return;
  4060. });
  4061. },
  4062. wordNext() {
  4063. this.dialogVisible2 = false;
  4064. },
  4065. isAddOrUpdateAttText() {
  4066. if (this.AttTextType == 0) {
  4067. this.addAttTextMessage();
  4068. } else {
  4069. this.updateAttText();
  4070. }
  4071. },
  4072. isAddOrUpdateLine() {
  4073. if (!this.lineTitle) {
  4074. this.$message.error("请填写链接标题");
  4075. return;
  4076. }
  4077. if (this.lineType == 0) {
  4078. this.addLine();
  4079. } else {
  4080. this.updateLine();
  4081. }
  4082. },
  4083. addAttTextMessage() {
  4084. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  4085. this.taskCount
  4086. ].chapterData.push({
  4087. name: this.AttText.title,
  4088. url: this.AttText.text,
  4089. type: 6,
  4090. });
  4091. this.imgChange1(null, null, 6, this.taskCount);
  4092. this.dialogVisible6 = false;
  4093. },
  4094. selectAttText(itemTaskIndex, i) {
  4095. this.AttText.title =
  4096. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  4097. itemTaskIndex
  4098. ].chapterData[i].name;
  4099. this.AttText.text =
  4100. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  4101. itemTaskIndex
  4102. ].chapterData[i].url;
  4103. this.taskCount = itemTaskIndex;
  4104. this.AttTextIndex = i;
  4105. this.AttTextType = 1;
  4106. this.dialogVisible6 = true;
  4107. },
  4108. updateAttText() {
  4109. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  4110. this.taskCount
  4111. ].chapterData[this.AttTextIndex].name = this.AttText.title;
  4112. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  4113. this.taskCount
  4114. ].chapterData[this.AttTextIndex].url = this.AttText.text;
  4115. this.dialogVisible6 = false;
  4116. },
  4117. addLine() {
  4118. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  4119. this.lineCount
  4120. ].chapterData.push({
  4121. name: "链接",
  4122. title: this.lineTitle,
  4123. url: this.line,
  4124. type: 8,
  4125. });
  4126. this.imgChange1(null, null, 8, this.lineCount);
  4127. this.dialogVisible7 = false;
  4128. },
  4129. selectLine(itemTaskIndex, i) {
  4130. this.line =
  4131. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  4132. itemTaskIndex
  4133. ].chapterData[i].url;
  4134. this.lineTitle = this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  4135. itemTaskIndex
  4136. ].chapterData[i].title
  4137. ? this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  4138. .chapterData[i].title
  4139. : "";
  4140. this.taskCount = itemTaskIndex;
  4141. this.lineCount = i;
  4142. this.lineType = 1;
  4143. this.dialogVisible7 = true;
  4144. },
  4145. updateLine() {
  4146. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  4147. this.taskCount
  4148. ].chapterData[this.lineCount].url = this.line;
  4149. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  4150. this.taskCount
  4151. ].chapterData[this.lineCount].title = this.lineTitle;
  4152. this.dialogVisible7 = false;
  4153. },
  4154. addPP() {
  4155. this.dialogVisible3 = true;
  4156. },
  4157. goTo(path) {
  4158. this.$router.push(path);
  4159. },
  4160. openTools(itemTaskIndex, i, toolIndex) {
  4161. this.toolIndex = toolIndex;
  4162. this.taskCount = itemTaskIndex;
  4163. if (i == 4) {
  4164. if (toolIndex == null) {
  4165. var a =
  4166. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  4167. .chapterData;
  4168. for (var i = 0; i < a.length; i++) {
  4169. if (a[i].url == 4 && a[i].askJson.askTitle != "") {
  4170. this.askJson =
  4171. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  4172. itemTaskIndex
  4173. ].chapterData[i].askJson;
  4174. }
  4175. }
  4176. } else {
  4177. this.askJson = JSON.parse(
  4178. JSON.stringify(
  4179. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  4180. itemTaskIndex
  4181. ].toolChoose[toolIndex]
  4182. )
  4183. );
  4184. }
  4185. this.dialogVisible5 = true;
  4186. } else if (i == 45) {
  4187. if (
  4188. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  4189. .toolChoose[toolIndex].testJson
  4190. ) {
  4191. this.testJson = JSON.parse(
  4192. JSON.stringify(
  4193. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  4194. itemTaskIndex
  4195. ].toolChoose[toolIndex].testJson
  4196. )
  4197. );
  4198. } else {
  4199. var testJson = {
  4200. testCount: 1,
  4201. testTitle: "",
  4202. testJson: [
  4203. {
  4204. teststitle: "",
  4205. testItem: 1,
  4206. checkList: [],
  4207. answer: [],
  4208. type: "1",
  4209. },
  4210. ],
  4211. };
  4212. this.testJson = testJson;
  4213. }
  4214. this.dialogVisibleChoice = true;
  4215. } else if (i == 47) {
  4216. if (
  4217. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  4218. .toolChoose[toolIndex].sentenceList
  4219. ) {
  4220. this.sentenceList = JSON.parse(
  4221. JSON.stringify(
  4222. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  4223. itemTaskIndex
  4224. ].toolChoose[toolIndex].sentenceList
  4225. )
  4226. );
  4227. } else {
  4228. var sentenceList = [
  4229. { sentenceTitle: "", addSentence: [], rightAnswer: [] },
  4230. ];
  4231. this.sentenceList = sentenceList;
  4232. }
  4233. this.dialogVisibleSentence = true;
  4234. } else if (i == 48) {
  4235. if (
  4236. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  4237. .toolChoose[toolIndex].tableJson
  4238. ) {
  4239. this.tableJson = JSON.parse(
  4240. JSON.stringify(
  4241. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  4242. itemTaskIndex
  4243. ].toolChoose[toolIndex].tableJson
  4244. )
  4245. );
  4246. } else {
  4247. var tableJson = { text: "" };
  4248. this.tableJson = tableJson;
  4249. }
  4250. this.dialogVisibleTable = true;
  4251. } else if (i == 50) {
  4252. if (
  4253. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  4254. .toolChoose[toolIndex].uploadJson
  4255. ) {
  4256. this.uploadJson = JSON.parse(
  4257. JSON.stringify(
  4258. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  4259. itemTaskIndex
  4260. ].toolChoose[toolIndex].uploadJson
  4261. )
  4262. );
  4263. } else {
  4264. var uploadJson = [];
  4265. this.uploadJson = uploadJson;
  4266. }
  4267. this.dialogVisibleMoreUpload = true;
  4268. } else if (i == 10) {
  4269. if (
  4270. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  4271. .toolChoose[toolIndex].preTime
  4272. ) {
  4273. this.preTime = JSON.parse(
  4274. JSON.stringify(
  4275. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  4276. itemTaskIndex
  4277. ].toolChoose[toolIndex].preTime
  4278. )
  4279. );
  4280. } else {
  4281. var preTime = 0;
  4282. this.preTime = preTime;
  4283. }
  4284. this.dialogVisiblePreTime = true;
  4285. } else if (i == 49) {
  4286. if (
  4287. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  4288. .toolChoose[toolIndex].groupJson
  4289. ) {
  4290. this.groupJson = JSON.parse(
  4291. JSON.stringify(
  4292. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  4293. itemTaskIndex
  4294. ].toolChoose[toolIndex].groupJson
  4295. )
  4296. );
  4297. } else {
  4298. var groupJson = {
  4299. group: [{ name: "第1组" }],
  4300. number: undefined,
  4301. islock: 1,
  4302. };
  4303. this.groupJson = groupJson;
  4304. }
  4305. this.dialogVisibleGroup = true;
  4306. } else if (i == 15) {
  4307. this.answerQ = this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  4308. itemTaskIndex
  4309. ].toolChoose[toolIndex].answerQ
  4310. ? JSON.parse(
  4311. JSON.stringify(
  4312. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  4313. itemTaskIndex
  4314. ].toolChoose[toolIndex].answerQ
  4315. )
  4316. )
  4317. : "";
  4318. this.dialogVisible8 = true;
  4319. } else if (i == 40) {
  4320. this.rateJson = this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  4321. itemTaskIndex
  4322. ].toolChoose[toolIndex].rateJson
  4323. ? JSON.parse(
  4324. JSON.stringify(
  4325. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  4326. itemTaskIndex
  4327. ].toolChoose[toolIndex].rateJson
  4328. )
  4329. )
  4330. : [{ detail: "", score: 5, value: "" }]; //{detail:"",score:5,value:""}
  4331. this.selectSteps = 1;
  4332. this.dialogVisibleRate = true;
  4333. } else if (i == 42) {
  4334. this.answerQ = this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  4335. itemTaskIndex
  4336. ].toolChoose[toolIndex].answerQ
  4337. ? JSON.parse(
  4338. JSON.stringify(
  4339. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  4340. itemTaskIndex
  4341. ].toolChoose[toolIndex].answerQ
  4342. )
  4343. )
  4344. : "";
  4345. this.dialogVisibleMp3 = true;
  4346. } else if (i == 41) {
  4347. this.selectJson = this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  4348. itemTaskIndex
  4349. ].toolChoose[toolIndex].selectJson
  4350. ? JSON.parse(
  4351. JSON.stringify(
  4352. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  4353. itemTaskIndex
  4354. ].toolChoose[toolIndex].selectJson
  4355. )
  4356. )
  4357. : { url: "", select: [], answer: [] };
  4358. this.selectSteps = 1;
  4359. this.dialogVisibleSelect = true;
  4360. }
  4361. },
  4362. chapAddTools(i) {
  4363. if (this.chapTools[0].tools.length == 0) {
  4364. this.chapTools[0].tools.push(i);
  4365. } else {
  4366. if (this.chapTools[0].tools.indexOf(i) != -1) {
  4367. this.chapTools[0].tools.splice(this.chapTools[0].tools.indexOf(i), 1);
  4368. } else {
  4369. this.chapTools[0].tools.push(i);
  4370. }
  4371. }
  4372. this.$forceUpdate();
  4373. },
  4374. addChaptersDataTools() {
  4375. if (this.chapTools[0].tools.indexOf(4) != -1) {
  4376. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  4377. this.chapCount
  4378. ].chapterData.push({
  4379. name: this.chapTools[0].toolDetail,
  4380. url: this.chapTools[0].tools,
  4381. type: 7,
  4382. askJson: this.askJson,
  4383. });
  4384. } else {
  4385. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  4386. this.chapCount
  4387. ].chapterData.push({
  4388. name: this.chapTools[0].toolDetail,
  4389. url: this.chapTools[0].tools,
  4390. type: 7,
  4391. });
  4392. }
  4393. this.imgChange1(null, null, 7, this.chapCount);
  4394. this.dialogVisible4 = false;
  4395. },
  4396. addTools(i, itemTaskIndex, toolIndex) {
  4397. // if (
  4398. // this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  4399. // .toolChoose[toolIndex].tool.length == 0
  4400. // ) {
  4401. // this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  4402. // itemTaskIndex
  4403. // ].toolChoose[toolIndex].tool.push(i);
  4404. // } else {
  4405. // if (
  4406. // this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  4407. // itemTaskIndex
  4408. // ].toolChoose[toolIndex].tool.indexOf(i) != -1
  4409. // ) {
  4410. // this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  4411. // itemTaskIndex
  4412. // ].toolChoose[toolIndex].tool.splice(
  4413. // this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  4414. // itemTaskIndex
  4415. // ].toolChoose[toolIndex].tool.indexOf(i),
  4416. // 1
  4417. // );
  4418. // } else {
  4419. // this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  4420. // itemTaskIndex
  4421. // ].toolChoose[toolIndex].tool.push(i);
  4422. // }
  4423. // console.log(
  4424. // this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  4425. // .toolChoose[toolIndex].tool
  4426. // );
  4427. // }
  4428. if (i == 4) {
  4429. if (
  4430. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  4431. .toolChoose[toolIndex].askJson.askTitle == "" ||
  4432. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  4433. .toolChoose[toolIndex].askJson[0].askstitle == "" ||
  4434. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  4435. .toolChoose[toolIndex].askJson[0].checkList < 2
  4436. ) {
  4437. this.openTools(itemTaskIndex, 4, toolIndex);
  4438. // this.$message({
  4439. // message: "请填写完整问卷内容",
  4440. // type: "error",
  4441. // });
  4442. return;
  4443. }
  4444. }
  4445. if (i == 45) {
  4446. if (
  4447. !this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  4448. .toolChoose[toolIndex].testJson ||
  4449. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  4450. .toolChoose[toolIndex].testJson.testJson[0].teststitle == "" ||
  4451. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  4452. .toolChoose[toolIndex].testJson.testJson[0].checkList < 2
  4453. ) {
  4454. this.openTools(itemTaskIndex, 45, toolIndex);
  4455. // this.$message({
  4456. // message: "请填写完整问卷内容",
  4457. // type: "error",
  4458. // });
  4459. return;
  4460. }
  4461. }
  4462. if (i == 47) {
  4463. if (
  4464. !this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  4465. .toolChoose[toolIndex].sentenceList ||
  4466. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  4467. .toolChoose[toolIndex].sentenceList[0].rightAnswer == 0
  4468. ) {
  4469. this.openTools(itemTaskIndex, 47, toolIndex);
  4470. return;
  4471. }
  4472. }
  4473. // if (i == 48) {
  4474. // if (
  4475. // !this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  4476. // .toolChoose[toolIndex].tableJson
  4477. // ) {
  4478. // this.openTools(itemTaskIndex, 48, toolIndex);
  4479. // return;
  4480. // }
  4481. // }
  4482. if (i == 50) {
  4483. if (
  4484. !this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  4485. .toolChoose[toolIndex].uploadJson
  4486. ) {
  4487. this.openTools(itemTaskIndex, 50, toolIndex);
  4488. return;
  4489. }
  4490. }
  4491. if (i == 49) {
  4492. if (
  4493. !this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  4494. .toolChoose[toolIndex].groupJson
  4495. ) {
  4496. this.openTools(itemTaskIndex, 49, toolIndex);
  4497. return;
  4498. }
  4499. }
  4500. if (i == 15) {
  4501. if (
  4502. !this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  4503. .toolChoose[toolIndex].answerQ ||
  4504. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  4505. .toolChoose[toolIndex].answerQ == ""
  4506. ) {
  4507. this.openTools(itemTaskIndex, 15, toolIndex);
  4508. // this.$message({
  4509. // message: "请填写问答内容",
  4510. // type: "error",
  4511. // });
  4512. return;
  4513. }
  4514. }
  4515. if (i == 40) {
  4516. if (
  4517. !this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  4518. .toolChoose[toolIndex].rateJson ||
  4519. !this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  4520. .toolChoose[toolIndex].rateJson.length
  4521. ) {
  4522. this.openTools(itemTaskIndex, 40, toolIndex);
  4523. return;
  4524. }
  4525. }
  4526. if (i == 41) {
  4527. if (
  4528. !this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  4529. .toolChoose[toolIndex].selectJson ||
  4530. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  4531. .toolChoose[toolIndex].selectJson.url == "" ||
  4532. !this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  4533. .toolChoose[toolIndex].selectJson.select.length ||
  4534. !this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  4535. .toolChoose[toolIndex].selectJson.answer.length
  4536. ) {
  4537. this.openTools(itemTaskIndex, 41, toolIndex);
  4538. return;
  4539. }
  4540. }
  4541. if (i == 42) {
  4542. if (
  4543. !this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  4544. .toolChoose[toolIndex].answerQ ||
  4545. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  4546. .toolChoose[toolIndex].answerQ == ""
  4547. ) {
  4548. this.openTools(itemTaskIndex, 42, toolIndex);
  4549. return;
  4550. }
  4551. }
  4552. if (
  4553. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  4554. .toolChoose[toolIndex].tool.length > 0
  4555. ) {
  4556. if (
  4557. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  4558. itemTaskIndex
  4559. ].toolChoose[toolIndex].tool.indexOf(i) != -1
  4560. ) {
  4561. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  4562. itemTaskIndex
  4563. ].toolChoose[toolIndex].tool.splice(
  4564. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  4565. itemTaskIndex
  4566. ].toolChoose[toolIndex].tool.indexOf(i),
  4567. 1
  4568. );
  4569. } else {
  4570. // this.$message({
  4571. // message: "每个工具只能添加一个",
  4572. // type: "error",
  4573. // });
  4574. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  4575. itemTaskIndex
  4576. ].toolChoose[toolIndex].tool = [];
  4577. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  4578. itemTaskIndex
  4579. ].toolChoose[toolIndex].tool.push(i);
  4580. }
  4581. } else {
  4582. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  4583. itemTaskIndex
  4584. ].toolChoose[toolIndex].tool.push(i);
  4585. }
  4586. this.$forceUpdate();
  4587. },
  4588. addAskList() {
  4589. this.askJson.askJson.push({
  4590. askstitle: "",
  4591. askItem: 1,
  4592. checkList: [],
  4593. });
  4594. this.askJson.askCount++;
  4595. },
  4596. addTestList() {
  4597. this.testJson.testJson.push({
  4598. teststitle: "",
  4599. testItem: 1,
  4600. checkList: [],
  4601. answer: [],
  4602. type: "1",
  4603. });
  4604. this.testJson.testCount++;
  4605. },
  4606. deleteAskList(index) {
  4607. this.askJson.askJson.splice(index, 1);
  4608. this.askJson.askCount--;
  4609. },
  4610. deleteTestList(index) {
  4611. this.testJson.testJson.splice(index, 1);
  4612. this.testJson.testCount--;
  4613. },
  4614. addcheckList(json) {
  4615. json.checkList.length++;
  4616. json.askItem++;
  4617. },
  4618. deletecheckList(json) {
  4619. json.checkList.length--;
  4620. json.askItem--;
  4621. },
  4622. addTcheckList(json) {
  4623. json.checkList.length++;
  4624. json.testItem++;
  4625. },
  4626. deleteTcheckList(json) {
  4627. json.checkList.length--;
  4628. json.testItem--;
  4629. },
  4630. checkTestType(type, json) {
  4631. json.type = type;
  4632. json.answer = [];
  4633. },
  4634. addSelectList(json) {
  4635. json.select.push("");
  4636. json.answer.push("");
  4637. },
  4638. deleteSelectList(json) {
  4639. // json.select.length--;
  4640. // json.answer.length--;
  4641. json.select.splice(json.select.length - 1, 1);
  4642. json.answer.splice(json.answer.length - 1, 1);
  4643. },
  4644. addAsk() {
  4645. if (this.askJson.askTitle === "") {
  4646. this.$message.error("标题不能为空!");
  4647. return;
  4648. }
  4649. var aj = this.askJson.askJson;
  4650. var b = 1;
  4651. for (var i = 0; i < aj.length; i++) {
  4652. if (aj[i].askstitle === "") {
  4653. var a = 1;
  4654. for (let index = 0; index < aj[i].askItem; index++) {
  4655. const element = aj[i].checkList[index]
  4656. ? aj[i].checkList[index]
  4657. : "";
  4658. if (element != "") {
  4659. b++;
  4660. this.$message.error("填写了选项,题目不能为空!");
  4661. return;
  4662. } else {
  4663. a++;
  4664. }
  4665. }
  4666. if (b == 1) {
  4667. this.$message.error("至少填写一个问题");
  4668. return;
  4669. }
  4670. } else if (aj[i].askstitle != "") {
  4671. for (let index = 0; index < aj[i].askItem; index++) {
  4672. const element = aj[i].checkList[index]
  4673. ? aj[i].checkList[index]
  4674. : "";
  4675. var index = 0;
  4676. for (var z = 0; z < aj[i].checkList.length; z++) {
  4677. var checkC = aj[i].checkList[z] ? aj[i].checkList[z] : "";
  4678. if (checkC != "") {
  4679. index++;
  4680. } else {
  4681. this.$message.error("选项不能为空!");
  4682. return;
  4683. }
  4684. }
  4685. b++;
  4686. if (index < 2) {
  4687. this.$message.error("填写了的题目,选项至少要有两项!");
  4688. return;
  4689. }
  4690. }
  4691. }
  4692. }
  4693. this.askJson.askJson = this.askJson.askJson.filter((el) => {
  4694. var elc = el.checkList.filter((element) => {
  4695. return element != "";
  4696. });
  4697. return el.askstitle != "" && elc.length != 0;
  4698. });
  4699. if (!this.dialogVisible4) {
  4700. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  4701. this.taskCount
  4702. ].toolChoose[this.toolIndex] = this.askJson;
  4703. }
  4704. this.dialogVisible5 = false;
  4705. if (
  4706. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[this.taskCount]
  4707. .toolChoose[this.toolIndex].tool != 4
  4708. ) {
  4709. this.addTools(4, this.taskCount, this.toolIndex);
  4710. }
  4711. },
  4712. addTest() {
  4713. // if (this.testJson.testTitle === "") {
  4714. // this.$message.error("标题不能为空!");
  4715. // return;
  4716. // }
  4717. var aj = this.testJson.testJson;
  4718. var b = 1;
  4719. for (var i = 0; i < aj.length; i++) {
  4720. if (aj[i].teststitle === "") {
  4721. var a = 1;
  4722. for (let index = 0; index < aj[i].testItem; index++) {
  4723. const element = aj[i].checkList[index]
  4724. ? aj[i].checkList[index]
  4725. : "";
  4726. if (element != "") {
  4727. b++;
  4728. this.$message.error("填写了选项,题目不能为空!");
  4729. return;
  4730. } else {
  4731. a++;
  4732. }
  4733. }
  4734. if (b == 1) {
  4735. this.$message.error("至少填写一个问题");
  4736. return;
  4737. }
  4738. } else if (aj[i].teststitle != "") {
  4739. for (let index = 0; index < aj[i].testItem; index++) {
  4740. const element = aj[i].checkList[index]
  4741. ? aj[i].checkList[index]
  4742. : "";
  4743. var index = 0;
  4744. for (var z = 0; z < aj[i].checkList.length; z++) {
  4745. var checkC = aj[i].checkList[z] ? aj[i].checkList[z] : "";
  4746. if (checkC != "") {
  4747. index++;
  4748. } else {
  4749. this.$message.error("选项不能为空!");
  4750. return;
  4751. }
  4752. }
  4753. b++;
  4754. if (index < 2) {
  4755. this.$message.error("填写了的题目,选项至少要有两项!");
  4756. return;
  4757. }
  4758. if (
  4759. (aj[i].type == "2" && !aj[i].answer.length) ||
  4760. (aj[i].type == "1" && aj[i].answer !== 0 && !aj[i].answer)
  4761. ) {
  4762. this.$message.error("有题目未选择答案请选择答案");
  4763. return;
  4764. }
  4765. }
  4766. }
  4767. }
  4768. this.testJson.testJson = this.testJson.testJson.filter((el) => {
  4769. var elc = el.checkList.filter((element) => {
  4770. return element != "";
  4771. });
  4772. return el.teststitle != "" && elc.length != 0;
  4773. });
  4774. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  4775. this.taskCount
  4776. ].toolChoose[this.toolIndex].testJson = this.testJson;
  4777. this.dialogVisibleChoice = false;
  4778. if (
  4779. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[this.taskCount]
  4780. .toolChoose[this.toolIndex].tool != 45
  4781. ) {
  4782. this.addTools(45, this.taskCount, this.toolIndex);
  4783. }
  4784. },
  4785. addAnswer() {
  4786. if (this.answerQ == "") {
  4787. this.$message.error("请输入您想要问的问题");
  4788. return;
  4789. }
  4790. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  4791. this.taskCount
  4792. ].toolChoose[this.toolIndex].answerQ = this.answerQ;
  4793. this.dialogVisible8 = false;
  4794. if (
  4795. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[this.taskCount]
  4796. .toolChoose[this.toolIndex].tool != 15
  4797. ) {
  4798. this.addTools(15, this.taskCount, this.toolIndex);
  4799. }
  4800. },
  4801. addMp3Answer() {
  4802. if (this.answerQ == "") {
  4803. this.$message.error("请输入您想要回答的问题");
  4804. return;
  4805. }
  4806. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  4807. this.taskCount
  4808. ].toolChoose[this.toolIndex].answerQ = this.answerQ;
  4809. this.dialogVisibleMp3 = false;
  4810. },
  4811. addRateAnswer() {
  4812. var a = 1;
  4813. for (var i = 0; i < this.rateJson.length; i++) {
  4814. if (this.rateJson[i].value == "") {
  4815. a = 2;
  4816. break;
  4817. }
  4818. }
  4819. if (a == 2) {
  4820. this.$message.error("请把评价信息填写完整");
  4821. return;
  4822. }
  4823. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  4824. this.taskCount
  4825. ].toolChoose[this.toolIndex].rateJson = this.rateJson;
  4826. this.dialogVisibleRate = false;
  4827. if (
  4828. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[this.taskCount]
  4829. .toolChoose[this.toolIndex].tool != 40
  4830. ) {
  4831. this.addTools(40, this.taskCount, this.toolIndex);
  4832. }
  4833. },
  4834. addSelectAnswer() {
  4835. if (this.selectJson.url == "") {
  4836. this.$message.error("请上传题目");
  4837. return;
  4838. }
  4839. if (!this.selectJson.select.length) {
  4840. this.$message.error("请添加选项");
  4841. return;
  4842. }
  4843. if (!this.selectJson.answer.length) {
  4844. this.$message.error("请设置答案");
  4845. return;
  4846. }
  4847. var a = 1;
  4848. for (var i = 0; i < this.selectJson.answer.length; i++) {
  4849. if (!this.selectJson.answer[i] && this.selectJson.answer[i] !== 0) {
  4850. a = 2;
  4851. }
  4852. }
  4853. if (a == 2) {
  4854. this.$message.error("请设置答案");
  4855. return;
  4856. }
  4857. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  4858. this.taskCount
  4859. ].toolChoose[this.toolIndex].selectJson = this.selectJson;
  4860. this.dialogVisibleSelect = false;
  4861. if (
  4862. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[this.taskCount]
  4863. .toolChoose[this.toolIndex].tool != 41
  4864. ) {
  4865. this.addTools(41, this.taskCount, this.toolIndex);
  4866. }
  4867. },
  4868. nextSelectSteps() {
  4869. if (this.selectJson.url == "") {
  4870. this.$message.error("请上传题目");
  4871. return;
  4872. }
  4873. if (!this.selectJson.select.length) {
  4874. this.$message.error("请添加选项");
  4875. return;
  4876. }
  4877. var a = 1;
  4878. for (var i = 0; i < this.selectJson.select.length; i++) {
  4879. if (!this.selectJson.select[i]) {
  4880. a = 2;
  4881. }
  4882. }
  4883. if (a == 2) {
  4884. this.$message.error("添加的选项不能为空");
  4885. return;
  4886. }
  4887. this.selectSteps++;
  4888. },
  4889. selectCourseDetail() {
  4890. if (this.cid == "" || this.cid == undefined) {
  4891. console.log("这是新增项目");
  4892. } else {
  4893. this.cidType = 1;
  4894. let params = {
  4895. cid: this.cid,
  4896. };
  4897. this.ajax
  4898. .get(this.$store.state.api + "select_course_detail", params)
  4899. .then((res) => {
  4900. this.loading = true;
  4901. this.unitJson = JSON.parse(res.data[0][0].chapters);
  4902. for (var j in this.unitJson) {
  4903. for (var i in this.unitJson[j].chapterInfo) {
  4904. this.unitJson[j].chapterInfo[i].taskJson[
  4905. this.taskCount
  4906. ].toolChoose = this.unitJson[j].chapterInfo[i].taskJson[
  4907. this.taskCount
  4908. ].toolChoose
  4909. ? this.unitJson[j].chapterInfo[i].taskJson[this.taskCount]
  4910. .toolChoose
  4911. : [];
  4912. for (var k in this.unitJson[j].chapterInfo[i].taskJson) {
  4913. let _chapterData = [];
  4914. for (var c in this.unitJson[j].chapterInfo[i].taskJson[k]
  4915. .chapterData) {
  4916. if (
  4917. this.unitJson[j].chapterInfo[i].taskJson[k].chapterData[c]
  4918. ) {
  4919. _chapterData.push(
  4920. this.unitJson[j].chapterInfo[i].taskJson[k].chapterData[
  4921. c
  4922. ]
  4923. );
  4924. }
  4925. }
  4926. this.unitJson[j].chapterInfo[i].taskJson[k].chapterData =
  4927. _chapterData;
  4928. }
  4929. }
  4930. }
  4931. this.courseName = res.data[0][0].title;
  4932. this.courseText = res.data[0][0].brief;
  4933. this.evalua = res.data[0][0].evaId;
  4934. this.cover = JSON.parse(res.data[0][0].cover);
  4935. this.noneBtnImg = this.cover.length >= 1;
  4936. // this.checkboxList =
  4937. // res.data[0][0].course_student.length > 0
  4938. // ? JSON.parse(res.data[0][0].course_student)
  4939. // : [];
  4940. this.checkboxList2 = res.data[0][0].juri
  4941. ? res.data[0][0].juri.split(",")
  4942. : [];
  4943. this.checkboxList3 = res.data[0][0].course_teacher
  4944. ? res.data[0][0].course_teacher.split(",")
  4945. : [];
  4946. // this.isTeacherSee =
  4947. // res.data[0][0].is_teacher_look == 0 ? true : false;
  4948. this.isTeacherSee = res.data[0][0].open == 1 ? true : false;
  4949. this.myWord = res.data[0][0].template;
  4950. this.templateC.id = "123";
  4951. this.courseUserid = res.data[0][0].userid;
  4952. this.nbOrder = res.data[0][0].ordernumber;
  4953. this.courseTypeId = [];
  4954. for (var i = 0; i < res.data[1].length; i++) {
  4955. this.courseTypeId.push(res.data[1][i].typeid);
  4956. }
  4957. console.log(this.courseTypeId);
  4958. // if (this.timer) clearInterval(this.timer);
  4959. if (this.timer) clearTimeout(this.timer);
  4960. this.timer = null;
  4961. // this.timer = setInterval(() => {
  4962. this.seleteCourseUpdate();
  4963. this.setMan()
  4964. // }, 5000);
  4965. this.$forceUpdate();
  4966. setTimeout(() => {
  4967. this.checkEva(this.evalua);
  4968. }, 0);
  4969. })
  4970. .catch((err) => {
  4971. console.error(err);
  4972. });
  4973. }
  4974. },
  4975. seleteCourseUpdate() {
  4976. let params = {
  4977. cid: this.cid,
  4978. };
  4979. this.ajax
  4980. .get(this.$store.state.api + "select_course_detail", params)
  4981. .then((res) => {
  4982. // console.log(this.unitJson);
  4983. let unitJson = JSON.parse(res.data[0][0].chapters);
  4984. this.unitJson2 = JSON.parse(res.data[0][0].chapters);
  4985. let _unitJson2 = JSON.parse(JSON.stringify(this.unitJson));
  4986. let _unitJson = [];
  4987. let _chapAarry = [];
  4988. let _unitIndex = JSON.parse(JSON.stringify(this.unitIndex));
  4989. let _unitIndex2 = JSON.parse(JSON.stringify(this.unitIndex));
  4990. let index = 1;
  4991. let chapindex;
  4992. if (_unitJson2.length > unitJson.length) {
  4993. for (let c = 0; c < _unitJson2.length; c++) {
  4994. _chapAarry.push(_unitJson2[c].chapterInfo[0].chapterid);
  4995. }
  4996. for (let j = 0; j < unitJson.length; j++) {
  4997. let count = 0;
  4998. for (let k = 0; k < _unitJson2.length; k++) {
  4999. if (
  5000. unitJson[j].chapterInfo[0].chapterid ==
  5001. _unitJson2[k].chapterInfo[0].chapterid
  5002. ) {
  5003. count++;
  5004. _chapAarry.splice(
  5005. _chapAarry.indexOf(_unitJson2[k].chapterInfo[0].chapterid),
  5006. 1
  5007. );
  5008. _unitJson.push(unitJson[j]);
  5009. break;
  5010. }
  5011. }
  5012. // if(count === 0){
  5013. // this.$message.error("您所修改的阶段已经被其他老师删除了");
  5014. // }
  5015. }
  5016. for (let k = 0; k < _unitJson2.length; k++) {
  5017. if (_unitJson2[k].isUpdate == 1) {
  5018. _chapAarry.splice(
  5019. _chapAarry.indexOf(_unitJson2[k].chapterInfo[0].chapterid),
  5020. 1
  5021. );
  5022. _unitJson.push(_unitJson2[k]);
  5023. }
  5024. }
  5025. console.log(_chapAarry);
  5026. for (let d = 0; d < _unitJson2.length; d++) {
  5027. if (
  5028. _chapAarry.indexOf(_unitJson2[d].chapterInfo[0].chapterid) != -1
  5029. ) {
  5030. if (_unitIndex == d) {
  5031. index = 2;
  5032. }
  5033. chapindex = d;
  5034. // this.$message.error("您所修改的阶段已经被其他老师删除了");
  5035. }
  5036. }
  5037. } else {
  5038. _unitJson = JSON.parse(JSON.stringify(_unitJson2));
  5039. }
  5040. for (let i = 0; i < unitJson.length; i++) {
  5041. if (
  5042. (i < _unitJson.length - 1 || i == _unitJson.length - 1) &&
  5043. _unitJson[i].chapterInfo[0].chapterid !=
  5044. unitJson[i].chapterInfo[0].chapterid
  5045. ) {
  5046. if (i == _unitJson.length - 1) {
  5047. // this.unitIndex++
  5048. _unitIndex2++;
  5049. }
  5050. _unitJson.splice(i, 0, unitJson[i]);
  5051. } else if (i > _unitJson.length - 1) {
  5052. _unitJson.push(unitJson[i]);
  5053. } else if (
  5054. _unitJson[i].chapterInfo[0].chapterid ==
  5055. unitJson[i].chapterInfo[0].chapterid
  5056. ) {
  5057. _unitJson[i] = unitJson[i];
  5058. }
  5059. // if (i == _unitIndex) {
  5060. // continue;
  5061. // } else
  5062. }
  5063. if (_chapAarry.length && index != 2) {
  5064. if (chapindex < _unitIndex) {
  5065. this.isDelete = 2;
  5066. // this.unitIndex--;
  5067. _unitIndex2--;
  5068. } else if (
  5069. _unitJson2[_unitIndex].chapterInfo[0].chapterid !=
  5070. _unitJson[_unitIndex].chapterInfo[0].chapterid
  5071. ) {
  5072. this.isDelete = 2;
  5073. for (let n = 0; n < _unitJson.length; n++) {
  5074. if (
  5075. _unitJson2[_unitIndex].chapterInfo[0].chapterid ==
  5076. _unitJson[n].chapterInfo[0].chapterid
  5077. ) {
  5078. // this.unitIndex = n;
  5079. _unitIndex2 = n;
  5080. _unitJson[n] = _unitJson2[_unitIndex];
  5081. break;
  5082. }
  5083. }
  5084. }
  5085. } else if (index != 2) {
  5086. // _unitJson[this.unitIndex] = _unitJson2[_unitIndex];
  5087. _unitJson[_unitIndex2] = _unitJson2[_unitIndex];
  5088. }
  5089. if (index == 1) {
  5090. this.unitJson = _unitJson;
  5091. this.$forceUpdate();
  5092. setTimeout(() => {
  5093. if (this.unitIndex != _unitIndex2) {
  5094. this.isDelete = 2;
  5095. this.unitIndex = _unitIndex2;
  5096. }
  5097. }, 0);
  5098. this.timer = setTimeout(() => {
  5099. this.seleteCourseUpdate();
  5100. }, 1000);
  5101. } else if (index == 2) {
  5102. let _this = this;
  5103. _this
  5104. .$confirm(
  5105. "您所修改的阶段已经被其他老师删除了,需要恢复嘛?",
  5106. "提示",
  5107. {
  5108. confirmButtonText: "需要",
  5109. cancelButtonText: "取消",
  5110. type: "warning",
  5111. }
  5112. )
  5113. .then(() => {
  5114. if (_this.time()) {
  5115. _this.restoreWork(
  5116. _chapAarry[0],
  5117. _unitJson,
  5118. chapindex,
  5119. _unitJson2,
  5120. _unitIndex2
  5121. );
  5122. }
  5123. })
  5124. .catch(() => {
  5125. _this.unitJson = _unitJson;
  5126. _this.$forceUpdate();
  5127. setTimeout(() => {
  5128. if (this.unitIndex != _unitIndex2) {
  5129. this.isDelete = 2;
  5130. this.unitIndex = _unitIndex2;
  5131. }
  5132. }, 0);
  5133. _this.timer = setTimeout(() => {
  5134. _this.seleteCourseUpdate();
  5135. }, 1000);
  5136. });
  5137. }
  5138. })
  5139. .catch((err) => {
  5140. console.error(err);
  5141. });
  5142. },
  5143. restoreWork(chapid, unitJson, chapindex, unitJson2, unitIndex2) {
  5144. let params = [
  5145. {
  5146. cid: this.cid,
  5147. chapters: JSON.stringify(this.unitJson),
  5148. uid: this.userid,
  5149. chapid: chapid,
  5150. },
  5151. ];
  5152. this.ajax
  5153. .post(this.$store.state.api + "restoreWork", params)
  5154. .then((res) => {
  5155. this.$message({
  5156. message: "恢复成功",
  5157. type: "success",
  5158. });
  5159. unitJson.splice(chapindex, 0, unitJson2[chapindex]);
  5160. this.unitJson = unitJson;
  5161. this.$forceUpdate();
  5162. setTimeout(() => {
  5163. if (this.unitIndex != unitIndex2) {
  5164. this.isDelete = 2;
  5165. this.unitIndex = unitIndex2;
  5166. }
  5167. }, 0);
  5168. this.timer = setTimeout(() => {
  5169. this.seleteCourseUpdate();
  5170. }, 1000);
  5171. })
  5172. .catch((err) => {
  5173. this.$message.error("网络不佳");
  5174. console.error(err);
  5175. });
  5176. },
  5177. getTypeName() {
  5178. console.log(this.courseTypeId);
  5179. this.$forceUpdate();
  5180. },
  5181. selectAllType() {
  5182. let params = {
  5183. org: this.org && this.org != "" ? this.org : "",
  5184. oid: this.oid && this.oid != "" ? this.oid : "",
  5185. };
  5186. this.ajax
  5187. .get(this.$store.state.api + "selectAllType", params)
  5188. .then((res) => {
  5189. this.CourseType = res.data;
  5190. for (var i = 0; i < res.data[0].length; i++) {
  5191. if (!this.cid) {
  5192. this.courseTypeId[res.data[0][i].id] = [];
  5193. }
  5194. if (!this.CourseTypeJson[res.data[0][i].id]) {
  5195. this.CourseTypeJson[res.data[0][i].id] = [];
  5196. }
  5197. if (this.oid == "69893dca-1d47-11ed-8c78-005056b86db5") {
  5198. if (res.data[0][i].name == "栏目") {
  5199. this.CourseType[0][i].name = "主题";
  5200. }
  5201. }
  5202. if (res.data[2].length == 0 && res.data[3].length == 0) {
  5203. for (var j = 0; j < res.data[1].length; j++) {
  5204. if (res.data[0][i].id == res.data[1][j].pid) {
  5205. this.CourseTypeJson[res.data[0][i].id].push(res.data[1][j]); // 去除公共分类
  5206. }
  5207. }
  5208. } else {
  5209. if (res.data[2].length > 0) {
  5210. for (var j = 0; j < res.data[2].length; j++) {
  5211. if (res.data[0][i].id == res.data[2][j].pid) {
  5212. this.CourseTypeJson[res.data[0][i].id].push(res.data[2][j]); // 去除公共分类
  5213. }
  5214. }
  5215. }
  5216. if (res.data[3].length > 0) {
  5217. for (var j = 0; j < res.data[3].length; j++) {
  5218. if (res.data[0][i].id == res.data[3][j].pid) {
  5219. this.CourseTypeJson[res.data[0][i].id].push(res.data[3][j]); // 去除公共分类
  5220. }
  5221. }
  5222. }
  5223. }
  5224. }
  5225. })
  5226. .catch((err) => {
  5227. console.error(err);
  5228. });
  5229. },
  5230. selectType() {
  5231. this.ajax
  5232. .get(this.$store.state.api + "selectType")
  5233. .then((res) => {
  5234. this.CourseType = res.data;
  5235. for (var i = 0; i < res.data[0].length; i++) {
  5236. if (!this.cid) {
  5237. this.courseTypeId[res.data[0][i].id] = "";
  5238. }
  5239. if (this.oid == "69893dca-1d47-11ed-8c78-005056b86db5") {
  5240. if (res.data[0][i].name == "栏目") {
  5241. this.CourseType[0][i].name = "主题";
  5242. }
  5243. }
  5244. for (var j = 0; j < res.data[1].length; j++) {
  5245. if (res.data[0][i].id == res.data[1][j].pid) {
  5246. if (!this.CourseTypeJson[res.data[0][i].id]) {
  5247. this.CourseTypeJson[res.data[0][i].id] = [];
  5248. }
  5249. this.CourseTypeJson[res.data[0][i].id].push(res.data[1][j]); // 去除公共分类
  5250. }
  5251. }
  5252. }
  5253. this.selectTypeByOid();
  5254. this.selectTypeByOrg();
  5255. })
  5256. .catch((err) => {
  5257. console.error(err);
  5258. });
  5259. },
  5260. selectTypeByOid() {
  5261. let params = {
  5262. oid: this.oid,
  5263. };
  5264. this.ajax
  5265. .get(this.$store.state.api + "selectTypeByOid", params)
  5266. .then((res) => {
  5267. for (var i = 0; i < res.data[0].length; i++) {
  5268. for (var j = 0; j < res.data[1].length; j++) {
  5269. if (res.data[0][i].id == res.data[1][j].pid) {
  5270. if (!this.CourseTypeJson[res.data[0][i].id]) {
  5271. this.CourseTypeJson[res.data[0][i].id] = [];
  5272. }
  5273. this.CourseTypeJson[res.data[0][i].id].push(res.data[1][j]);
  5274. }
  5275. }
  5276. }
  5277. })
  5278. .catch((err) => {
  5279. console.error(err);
  5280. });
  5281. },
  5282. selectTypeByOrg() {
  5283. let params = {
  5284. oid: this.org,
  5285. };
  5286. this.ajax
  5287. .get(this.$store.state.api + "selectTypeByOrg", params)
  5288. .then((res) => {
  5289. for (var i = 0; i < res.data[0].length; i++) {
  5290. for (var j = 0; j < res.data[1].length; j++) {
  5291. if (res.data[0][i].id == res.data[1][j].pid) {
  5292. if (!this.CourseTypeJson[res.data[0][i].id]) {
  5293. this.CourseTypeJson[res.data[0][i].id] = [];
  5294. }
  5295. this.CourseTypeJson[res.data[0][i].id].push(res.data[1][j]);
  5296. }
  5297. }
  5298. }
  5299. this.$forceUpdate();
  5300. })
  5301. .catch((err) => {
  5302. console.error(err);
  5303. });
  5304. },
  5305. OtherMb(type) {
  5306. this.typeMode = type;
  5307. setTimeout(() => {
  5308. this.checkEva(this.checkId);
  5309. }, 0);
  5310. },
  5311. openMember(){
  5312. this.searchTN = ''
  5313. this.getTeacher();
  5314. this.dialogVisibleMember = true
  5315. },
  5316. checkEva(id) {
  5317. this.selectEva();
  5318. this.evalua = id;
  5319. this.checkId = id;
  5320. if (this.evalua != "") {
  5321. for (var i = 0; i < this.evaJuri.length; i++) {
  5322. if (this.evalua == this.evaJuri[i].id) {
  5323. this.eTitle = this.evaJuri[i].title;
  5324. this.eJson = JSON.parse(this.evaJuri[i].content);
  5325. }
  5326. }
  5327. this.data.data = [];
  5328. this.$forceUpdate();
  5329. setTimeout(() => {
  5330. this.setMindData();
  5331. }, 500);
  5332. }
  5333. },
  5334. selectEva() {
  5335. let params = {
  5336. oid: this.oid,
  5337. };
  5338. this.ajax
  5339. .get(this.$store.state.api + "selectAllEvaluation", params)
  5340. .then((res) => {
  5341. this.evaJuri = res.data[0];
  5342. })
  5343. .catch((err) => {
  5344. console.error(err);
  5345. });
  5346. },
  5347. setMindData() {
  5348. let targetArray = [];
  5349. this.data.data = [];
  5350. this.data.data.push({ id: "root", isroot: true, topic: this.eTitle });
  5351. let _eJson = Object.keys(this.eJson);
  5352. let _e = this.eJson;
  5353. for (let i = 0; i < _eJson.length; i++) {
  5354. let element = _e[_eJson[i]];
  5355. this.data.data.push({
  5356. id: element.id,
  5357. parentid: "root",
  5358. topic: element.name,
  5359. });
  5360. // targetArray.push({
  5361. // id: element.id,
  5362. // parentid: "root",
  5363. // name: element.name,
  5364. // });
  5365. targetArray.push({
  5366. value: element.name,
  5367. label: element.name,
  5368. children: [],
  5369. });
  5370. let _eJsonc = Object.keys(element.child);
  5371. let _e2 = element.child;
  5372. for (let j = 0; j < _eJsonc.length; j++) {
  5373. let _ec = _e2[_eJsonc[j]];
  5374. this.data.data.push({
  5375. id: _ec.id,
  5376. parentid: element.id,
  5377. topic: _ec.name,
  5378. });
  5379. // targetArray.push({
  5380. // id: _ec.id,
  5381. // parentid: element.id,
  5382. // name: _ec.name,
  5383. // });
  5384. targetArray[i].children.push({
  5385. value: _ec.name,
  5386. label: _ec.name,
  5387. children: [],
  5388. });
  5389. let _eJsonz = Object.keys(_ec.child);
  5390. let _e3 = _ec.child;
  5391. for (let z = 0; z < _eJsonz.length; z++) {
  5392. let _ez = _e3[_eJsonz[z]];
  5393. this.data.data.push({
  5394. id: _ez.id,
  5395. parentid: _ec.id,
  5396. topic: _ez.name,
  5397. });
  5398. // targetArray.push({
  5399. // id: _ez.id,
  5400. // parentid: _ec.id,
  5401. // name: _ez.name,
  5402. // });
  5403. targetArray[i].children[j].children.push({
  5404. value: _ez.name,
  5405. label: _ez.name,
  5406. });
  5407. }
  5408. }
  5409. }
  5410. this.targetArray = targetArray;
  5411. this.$forceUpdate();
  5412. },
  5413. /*添加评价 */
  5414. addEList(index, tIndex) {
  5415. this.unitJson[index].chapterInfo[0].taskJson[tIndex].eList
  5416. ? this.unitJson[index].chapterInfo[0].taskJson[tIndex].eList.push({
  5417. value: "",
  5418. detail: "",
  5419. score: 5,
  5420. })
  5421. : (this.unitJson[index].chapterInfo[0].taskJson[tIndex].eList = [
  5422. { value: "", detail: "", score: 5 },
  5423. ]);
  5424. this.$forceUpdate();
  5425. },
  5426. forceUpdate() {
  5427. this.$forceUpdate();
  5428. },
  5429. deletEList(index, tIndex, eIndex) {
  5430. this.unitJson[index].chapterInfo[0].taskJson[tIndex].eList.splice(
  5431. eIndex,
  5432. 1
  5433. );
  5434. this.$forceUpdate();
  5435. },
  5436. getChoosePic(t) {
  5437. this.chooseType = t;
  5438. this.getAllBanner();
  5439. },
  5440. getAllBanner() {
  5441. this.sysPicVisible = true;
  5442. let params = {
  5443. t: this.chooseType,
  5444. };
  5445. this.ajax
  5446. .get(this.$store.state.api + "selectAllBanner", params)
  5447. .then((res) => {
  5448. this.sysPic = res.data[0];
  5449. })
  5450. .catch((err) => {
  5451. console.error(err);
  5452. });
  5453. },
  5454. // getClass() {
  5455. // let params = {
  5456. // oid: this.oid,
  5457. // };
  5458. // this.ajax
  5459. // .get(this.$store.state.api + "selectClassBySchool", params)
  5460. // .then((res) => {
  5461. // this.classJuri = res.data[0];
  5462. // })
  5463. // .catch((err) => {
  5464. // console.error(err);
  5465. // });
  5466. // },
  5467. deleteSysPic() {
  5468. this.cover = [];
  5469. this.isSysPic = false;
  5470. },
  5471. deleteSelectPic() {
  5472. this.selectJson.url = "";
  5473. },
  5474. setEListStar() {
  5475. this.$forceUpdate();
  5476. },
  5477. deletRateList(i) {
  5478. this.rateJson.splice(i, 1);
  5479. },
  5480. addRateList() {
  5481. this.rateJson.push({ detail: "", score: 5, value: "" });
  5482. },
  5483. addSt() {
  5484. this.sentenceList.push({
  5485. sentenceTitle: "",
  5486. addSentence: [],
  5487. rightAnswer: [],
  5488. });
  5489. },
  5490. addSen(i) {
  5491. this.sentenceList[i].addSentence.push(this.sentenceList[i].sentenceTitle);
  5492. // this.isPushTitleList.push(this.sentenceTitle);
  5493. this.sentenceList[i].sentenceTitle = "";
  5494. },
  5495. setRightAnswer(s, i, j) {
  5496. if (this.sentenceList[i].rightAnswer.indexOf(s) == -1) {
  5497. this.sentenceList[i].rightAnswer.push(s);
  5498. }
  5499. },
  5500. returnCard(r, i, j) {
  5501. this.sentenceList[i].rightAnswer.splice(j, 1);
  5502. },
  5503. addSentenceTool() {
  5504. for (var i = 0; i < this.sentenceList.length; i++) {
  5505. if (this.sentenceList[i].rightAnswer.length == 0) {
  5506. this.$message.error("请将信息填写完整!");
  5507. return;
  5508. }
  5509. if (
  5510. this.sentenceList[i].addSentence.length !=
  5511. this.sentenceList[i].rightAnswer.length
  5512. ) {
  5513. this.$message.error("请将信息填写完整!");
  5514. return;
  5515. }
  5516. }
  5517. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  5518. this.taskCount
  5519. ].toolChoose[this.toolIndex].sentenceList = this.sentenceList;
  5520. this.sentenceList = [
  5521. { sentenceTitle: "", addSentence: [], rightAnswer: [] },
  5522. ];
  5523. this.dialogVisibleSentence = false;
  5524. // this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  5525. // itemTaskIndex
  5526. // ].toolChoose[toolIndex].tool = [];
  5527. // this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  5528. // itemTaskIndex
  5529. // ].toolChoose[toolIndex].tool.push(i);
  5530. if (
  5531. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[this.taskCount]
  5532. .toolChoose[this.toolIndex].tool != 47
  5533. ) {
  5534. this.addTools(47, this.taskCount, this.toolIndex);
  5535. }
  5536. },
  5537. addTableJson() {
  5538. // if (this.tableJson.text == "" || this.tableJson.text == "<p></p>") {
  5539. // this.$message.error("请将信息填写完整!");
  5540. // return;
  5541. // }
  5542. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  5543. this.taskCount
  5544. ].toolChoose[this.toolIndex].tableJson = this.tableJson;
  5545. this.tableJson = [{ text: "" }];
  5546. this.dialogVisibleTable = false;
  5547. if (
  5548. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[this.taskCount]
  5549. .toolChoose[this.toolIndex].tool != 48
  5550. ) {
  5551. this.addTools(48, this.taskCount, this.toolIndex);
  5552. }
  5553. },
  5554. addMoreUpload() {
  5555. if (this.uploadJson.length == 0) {
  5556. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  5557. this.taskCount
  5558. ].toolChoose[this.toolIndex].uploadJson = [];
  5559. } else {
  5560. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  5561. this.taskCount
  5562. ].toolChoose[this.toolIndex].uploadJson = this.uploadJson;
  5563. }
  5564. this.uploadJson = [];
  5565. this.dialogVisibleMoreUpload = false;
  5566. if (
  5567. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[this.taskCount]
  5568. .toolChoose[this.toolIndex].tool != 50
  5569. ) {
  5570. this.addTools(50, this.taskCount, this.toolIndex);
  5571. }
  5572. },
  5573. addPreTime() {
  5574. if (this.preTime == 0) {
  5575. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  5576. this.taskCount
  5577. ].toolChoose[this.toolIndex].preTime = 0;
  5578. } else {
  5579. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  5580. this.taskCount
  5581. ].toolChoose[this.toolIndex].preTime = this.preTime;
  5582. }
  5583. this.preTime = 0;
  5584. this.dialogVisiblePreTime = false;
  5585. if (
  5586. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[this.taskCount]
  5587. .toolChoose[this.toolIndex].tool != 10
  5588. ) {
  5589. this.addTools(10, this.taskCount, this.toolIndex);
  5590. }
  5591. },
  5592. goToTask(i) {
  5593. document.getElementsByClassName("rightBox")[0].scrollTop =
  5594. document.getElementsByClassName("taskBorder")[i].offsetTop - 100;
  5595. this.isClickColor = i + 1;
  5596. },
  5597. addGroup(i) {
  5598. // this.groupJson.group.splice(i + 1, 0, { name: "第"+(i+1)+"组" });
  5599. this.groupJson.group.push({
  5600. name: "第" + (this.groupJson.group.length + 1) + "组",
  5601. });
  5602. },
  5603. deleteGroup(i) {
  5604. this.groupJson.group.splice(i, 1);
  5605. },
  5606. addGroupJson() {
  5607. for (var i = 0; i < this.groupJson.group.length; i++) {
  5608. if (!this.groupJson.group[i].name) {
  5609. this.$message.error("请将信息填写完整!");
  5610. return;
  5611. }
  5612. }
  5613. if (!this.groupJson.number) {
  5614. this.$message.error("请将信息填写完整!");
  5615. return;
  5616. }
  5617. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  5618. this.taskCount
  5619. ].toolChoose[this.toolIndex].groupJson = JSON.parse(
  5620. JSON.stringify(this.groupJson)
  5621. );
  5622. this.dialogVisibleGroup = false;
  5623. this.groupJson = {};
  5624. if (
  5625. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[this.taskCount]
  5626. .toolChoose[this.toolIndex].tool != 49
  5627. ) {
  5628. this.addTools(49, this.taskCount, this.toolIndex);
  5629. }
  5630. },
  5631. updateTime(preTime) {
  5632. this.preTime = preTime;
  5633. },
  5634. },
  5635. beforeDestroy() {
  5636. clearTimeout(this.timer);
  5637. this.timer = null;
  5638. clearInterval(this.timer2);
  5639. this.timer2 = null;
  5640. },
  5641. beforeRouteLeave(to, from, next) {
  5642. clearTimeout(this.timer);
  5643. this.timer = null;
  5644. clearInterval(this.timer2);
  5645. this.timer2 = null;
  5646. next();
  5647. },
  5648. created() {
  5649. this.getStudent();
  5650. this.getTeacher();
  5651. this.getClass();
  5652. this.getTemplate();
  5653. // this.selectType();
  5654. this.selectAllType();
  5655. this.selectEva();
  5656. this.loading = false;
  5657. this.timer2 = setInterval(() => {
  5658. this.selectEva();
  5659. }, 5000);
  5660. setTimeout(() => {
  5661. this.selectCourseDetail();
  5662. }, 500);
  5663. },
  5664. };
  5665. </script>
  5666. <style scoped>
  5667. @media screen and (max-width: 1280px) {
  5668. .mbCss {
  5669. flex-direction: column !important;
  5670. }
  5671. .pjCss {
  5672. width: 100% !important;
  5673. }
  5674. .evaCss {
  5675. width: 100% !important;
  5676. }
  5677. }
  5678. .dialog_diy>>>.el-dialog__header {
  5679. background: #3c3c3c !important;
  5680. padding: 15px 20px;
  5681. }
  5682. .dialog_diy>>>.el-dialog__title {
  5683. color: #fff;
  5684. }
  5685. .dialog_diy>>>.el-dialog__headerbtn {
  5686. top: 19px;
  5687. }
  5688. .dialog_diy>>>.el-dialog__headerbtn .el-dialog__close {
  5689. color: #fff;
  5690. }
  5691. .dialog_diy>>>.el-dialog__headerbtn .el-dialog__close:hover {
  5692. color: #fff;
  5693. }
  5694. .dialog_diy>>>.el-dialog__body,
  5695. .dialog_diy>>>.el-dialog__footer {
  5696. background: #fafafa;
  5697. }
  5698. .dialog_diy3>>>.el-dialog__body,
  5699. .dialog_diy3>>>.el-dialog__footer {
  5700. background: #eee !important;
  5701. }
  5702. .dialog_diy3>>>.el-dialog__body {
  5703. padding: 20px 20px;
  5704. }
  5705. .left {
  5706. border-right: 1px solid rgb(60, 94, 143);
  5707. display: flex;
  5708. flex-direction: column;
  5709. align-items: center;
  5710. min-height: 600px;
  5711. width: 385px;
  5712. height: 80%;
  5713. }
  5714. .tips {
  5715. color: rgb(128, 128, 128);
  5716. font-size: 12px;
  5717. width: 270px;
  5718. margin: 40px;
  5719. }
  5720. .pb_content {
  5721. height: 100% !important;
  5722. /* margin: 0 20px 0 20px; */
  5723. }
  5724. .pb_content_body {
  5725. width: 100% !important;
  5726. height: 100%;
  5727. }
  5728. .info_solid {
  5729. width: 270px;
  5730. height: 30px;
  5731. border-left: 1px solid #bdbdbd;
  5732. margin: 10px 0px 10px 30px;
  5733. }
  5734. .info_steps {
  5735. width: 270px;
  5736. font-size: 0.875rem;
  5737. display: flex;
  5738. align-items: center;
  5739. }
  5740. .info_steps span:nth-child(1) {
  5741. width: 30px;
  5742. height: 30px;
  5743. background: rgba(0, 0, 0, 0.38);
  5744. display: block;
  5745. color: #fff;
  5746. border-radius: 40px;
  5747. text-align: center;
  5748. line-height: 30px;
  5749. }
  5750. .steps_active {
  5751. background: #3d67bc !important;
  5752. }
  5753. .info_steps span:nth-child(2) {
  5754. margin-left: 5px;
  5755. }
  5756. .right {
  5757. height: 100%;
  5758. width: 100%;
  5759. display: flex;
  5760. overflow: hidden;
  5761. }
  5762. .basic_box {
  5763. margin: 0 auto;
  5764. position: relative;
  5765. padding: 0 20px 0 20px;
  5766. }
  5767. .basic_box_success {
  5768. width: 100%;
  5769. min-height: 455px;
  5770. padding: 50px 0;
  5771. position: relative;
  5772. text-align: center;
  5773. border-bottom: 1px solid #bfbfbf;
  5774. box-sizing: border-box;
  5775. display: flex;
  5776. align-items: center;
  5777. flex-direction: column;
  5778. justify-content: center;
  5779. }
  5780. .info_title {
  5781. font-size: 1.5em;
  5782. margin-right: 25px;
  5783. /* margin: 20px 30px 20px 30px; */
  5784. }
  5785. .bInfo_title {
  5786. text-align: left;
  5787. margin: 10px 0;
  5788. }
  5789. .small_title {
  5790. font-size: 14px;
  5791. line-height: 40px;
  5792. }
  5793. .chapter_beizhu {
  5794. font-size: 12px;
  5795. font-weight: bold;
  5796. float: right;
  5797. color: rgb(128, 128, 128);
  5798. margin-top: 5px;
  5799. }
  5800. .chapter_uploadBox1 {
  5801. text-align: left;
  5802. background-color: rgb(242, 242, 242);
  5803. width: 100%;
  5804. height: 67px;
  5805. padding: 0px 15px;
  5806. border-radius: 8px;
  5807. overflow: hidden;
  5808. font-size: 16px;
  5809. box-sizing: border-box;
  5810. position: relative;
  5811. }
  5812. .chapter_add {
  5813. width: 100%;
  5814. height: 32px;
  5815. margin-top: 15px;
  5816. cursor: pointer;
  5817. }
  5818. .chapter_add_l {
  5819. margin-left: 5px;
  5820. width: 30px;
  5821. height: 30px;
  5822. float: left;
  5823. border: 1px solid #aaa;
  5824. color: #aaa;
  5825. border-radius: 50%;
  5826. font-size: 25px;
  5827. text-align: center;
  5828. }
  5829. .chapter_add_r {
  5830. font-size: 18px;
  5831. height: 40px;
  5832. line-height: 30px;
  5833. text-indent: 10px;
  5834. color: #aaa;
  5835. }
  5836. .chapter_add_r span {
  5837. font-size: 12px;
  5838. color: rgb(204, 204, 204);
  5839. }
  5840. .chapter_add_input {
  5841. display: none;
  5842. }
  5843. .line {
  5844. width: 85%;
  5845. margin: 0 auto;
  5846. border-top: 1px solid #e5e5e5;
  5847. margin-top: 20px;
  5848. }
  5849. .info_btnBox {
  5850. width: 100%;
  5851. display: flex;
  5852. justify-content: space-evenly;
  5853. margin: 10px 0 10px 0;
  5854. }
  5855. .info_btn,
  5856. .teacherWord {
  5857. color: #fff;
  5858. background-color: #0f7eff;
  5859. padding: 8px 24px;
  5860. font-size: 0.9375rem;
  5861. box-shadow: 0px 1px 3px 0px rgb(0 0 0 / 20%), 0px 2px 2px 0px rgb(0 0 0 / 14%),
  5862. 0px 3px 1px -2px rgb(0 0 0 / 12%);
  5863. min-width: 64px;
  5864. font-weight: 500;
  5865. border-radius: 4px;
  5866. box-sizing: border-box;
  5867. border: none;
  5868. cursor: pointer;
  5869. }
  5870. .teacherWord {
  5871. width: 105px !important;
  5872. text-align: center !important;
  5873. line-height: 36px !important;
  5874. padding: 0 !important;
  5875. font-size: 14px !important;
  5876. margin: 10px 0 !important;
  5877. }
  5878. .wordTeacher {
  5879. display: flex;
  5880. flex-direction: column;
  5881. width: 20%;
  5882. text-align: center;
  5883. font-size: 14px;
  5884. margin: 30px 30px 0 10px;
  5885. background: #fff;
  5886. position: relative;
  5887. border-radius: 5px;
  5888. padding: 25px 0px;
  5889. }
  5890. .wordPic {
  5891. margin: 0 auto;
  5892. width: 60px;
  5893. height: 60px;
  5894. cursor: pointer;
  5895. }
  5896. .deleteWord {
  5897. width: 22px;
  5898. height: 22px;
  5899. position: absolute;
  5900. right: 5px;
  5901. top: -15px;
  5902. cursor: pointer;
  5903. display: none;
  5904. z-index: 999;
  5905. }
  5906. .wordPic>img,
  5907. .deleteWord>img,
  5908. .addToolImg>img {
  5909. width: 100%;
  5910. height: 100%;
  5911. }
  5912. .info_btn:hover {
  5913. background-color: #4f7cd5 !important;
  5914. }
  5915. .cru_selectBox {
  5916. display: flex;
  5917. margin: 24px 0 10px;
  5918. flex-wrap: nowrap;
  5919. white-space: nowrap;
  5920. overflow: auto;
  5921. position: relative;
  5922. height: 47px;
  5923. }
  5924. .cru_selectBox::-webkit-scrollbar {
  5925. /*滚动条整体样式*/
  5926. width: 6px;
  5927. /*高宽分别对应横竖滚动条的尺寸*/
  5928. height: 6px;
  5929. }
  5930. /*定义滚动条轨道 内阴影+圆角*/
  5931. .cru_selectBox::-webkit-scrollbar-track {
  5932. border-radius: 10px;
  5933. background-color: #eee;
  5934. }
  5935. /*定义滑块 内阴影+圆角*/
  5936. .cru_selectBox::-webkit-scrollbar-thumb {
  5937. border-radius: 10px;
  5938. -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);
  5939. background-color: rgba(0, 0, 0, 0.1);
  5940. }
  5941. .cru_line {
  5942. position: absolute;
  5943. bottom: 0px;
  5944. transition: all 0.5s;
  5945. left: 0px;
  5946. width: 125px;
  5947. margin-left: -25px;
  5948. }
  5949. .cru_select {
  5950. font-size: 21px;
  5951. margin-right: 37px;
  5952. margin-left: 5px;
  5953. cursor: pointer;
  5954. color: #a6a6a6;
  5955. }
  5956. .cru_selected {
  5957. color: #0b7fc2 !important;
  5958. }
  5959. .chapter_contentbox {
  5960. display: flex;
  5961. align-items: center;
  5962. margin-top: 15px;
  5963. }
  5964. .chapter_contentbox div:nth-child(1) {
  5965. /* width: 150px; */
  5966. margin: 0px;
  5967. /* font-size: 2em; */
  5968. color: black;
  5969. display: block;
  5970. white-space: nowrap;
  5971. overflow: hidden;
  5972. text-overflow: ellipsis;
  5973. /* font-weight: 600; */
  5974. margin-right: 20px;
  5975. font-size: 18px;
  5976. }
  5977. .chapter_contentbox div:nth-child(2) {
  5978. width: 380px;
  5979. }
  5980. .chapter_contentbox div:nth-child(3),
  5981. .remove {
  5982. background-image: url("../../assets/remove.png");
  5983. cursor: pointer;
  5984. opacity: 0.5;
  5985. width: 40px;
  5986. height: 50px;
  5987. background-repeat: no-repeat;
  5988. background-position: 5px 10px;
  5989. }
  5990. .remove1 {
  5991. background-image: url("../../assets/remove1.png");
  5992. background-repeat: no-repeat;
  5993. background-position: 5px 10px;
  5994. width: 40px;
  5995. height: 50px;
  5996. cursor: pointer;
  5997. }
  5998. .binfo_input {
  5999. font: inherit;
  6000. color: currentColor;
  6001. width: 100%;
  6002. margin: 0;
  6003. /* padding: 15px 14px; */
  6004. padding: 8px 14px;
  6005. display: block;
  6006. min-width: 0;
  6007. outline: none;
  6008. box-sizing: content-box;
  6009. background: none;
  6010. border: 1px solid rgba(0, 0, 0, 0.23);
  6011. border-radius: 4px;
  6012. box-sizing: border-box;
  6013. background: #fff;
  6014. font-size: 18px;
  6015. }
  6016. .binfo_input:focus-visible {
  6017. border: 1px solid rgba(61, 103, 188);
  6018. }
  6019. .time {
  6020. display: flex;
  6021. margin: 35px 0 80px 0;
  6022. }
  6023. .chapter_btnbox {
  6024. width: 160px;
  6025. border-radius: 5px;
  6026. border: 2px dashed gray;
  6027. display: flex;
  6028. padding: 8px 50px;
  6029. align-items: center;
  6030. justify-content: center;
  6031. margin: 30px auto 0;
  6032. cursor: pointer;
  6033. }
  6034. .icon_add {
  6035. position: relative;
  6036. width: 24px;
  6037. padding-top: 20px;
  6038. border-radius: 100%;
  6039. border-width: 2px;
  6040. border-style: solid;
  6041. border-color: gray;
  6042. }
  6043. .icon_add i:nth-child(1) {
  6044. position: absolute;
  6045. left: 50%;
  6046. top: 50%;
  6047. height: 60%;
  6048. transform: translate(-50%, -50%);
  6049. border-width: 1px;
  6050. border-style: solid;
  6051. border-color: inherit;
  6052. }
  6053. .icon_add i:nth-child(2) {
  6054. position: absolute;
  6055. top: 50%;
  6056. left: 50%;
  6057. width: 60%;
  6058. transform: translate(-50%, -50%);
  6059. border-width: 1px;
  6060. border-style: solid;
  6061. border-color: inherit;
  6062. }
  6063. .chapter_btn_w {
  6064. font-size: 0.9375rem;
  6065. font-weight: bold;
  6066. color: gray;
  6067. margin-left: 20px;
  6068. }
  6069. .disUoloadSty>>>.el-icon-plus {
  6070. display: none !important;
  6071. /* 上传按钮隐藏 */
  6072. }
  6073. .imgLeft {
  6074. margin: 15px 0;
  6075. }
  6076. .add_info_box {
  6077. margin: 20px 0;
  6078. }
  6079. .add_info_box button {
  6080. margin: 0 10px 10px 0;
  6081. }
  6082. .add_chapters_box {
  6083. text-align: left;
  6084. background-color: rgb(232 234 237);
  6085. width: 100%;
  6086. padding: 0px 15px;
  6087. border-radius: 15px;
  6088. font-size: 16px;
  6089. box-sizing: border-box;
  6090. position: relative;
  6091. padding: 0 10px 5px 10px;
  6092. height: 185px;
  6093. overflow-y: auto;
  6094. overflow-x: hidden;
  6095. }
  6096. .homework_box {
  6097. display: flex;
  6098. align-items: flex-start;
  6099. flex-wrap: wrap;
  6100. margin: 15px 0 0 0;
  6101. flex-direction: column;
  6102. align-content: flex-start;
  6103. }
  6104. .course_homework {
  6105. display: flex;
  6106. justify-content: center;
  6107. flex-direction: row;
  6108. align-items: center;
  6109. margin: 0 10px 0 0;
  6110. }
  6111. .course_homework>>>.el-input__inner {
  6112. width: 140px;
  6113. margin-left: 15px;
  6114. }
  6115. .chapter_upload_move {
  6116. position: relative;
  6117. background-color: #fff;
  6118. position: absolute;
  6119. width: 100%;
  6120. top: 0px;
  6121. left: 0px;
  6122. border: 1px solid #eee;
  6123. border-radius: 5px;
  6124. transition: width 2s;
  6125. -moz-transition: width 2s;
  6126. -webkit-transition: width 2s;
  6127. -o-transition: width 2s;
  6128. }
  6129. .chapter_upload_l_i {
  6130. background-image: url("../../assets/icon.png");
  6131. background-position: 3px -165px;
  6132. width: 30px;
  6133. height: 30px;
  6134. margin: 10px auto 0 auto;
  6135. }
  6136. .left_first {
  6137. display: flex;
  6138. flex-direction: column;
  6139. flex-wrap: nowrap;
  6140. }
  6141. .right_first {
  6142. width: 100%;
  6143. height: 100%;
  6144. margin-top: 15px;
  6145. }
  6146. .right_title {
  6147. height: 30px;
  6148. padding: 15px 0 15px 20px;
  6149. border-bottom: 1px solid #f2f2f2;
  6150. font-size: 1.5em;
  6151. font-weight: bold;
  6152. color: #0f7eff;
  6153. margin: 0 auto;
  6154. }
  6155. .people {
  6156. border: 1px solid rgb(229 229 229);
  6157. height: 495px;
  6158. border-radius: 5px;
  6159. width: 100%;
  6160. overflow: auto;
  6161. }
  6162. .people_top {
  6163. display: flex;
  6164. width: 100%;
  6165. /* justify-content: space-between; */
  6166. /* align-items: center; */
  6167. flex-direction: column;
  6168. padding: 10px 25px 0;
  6169. box-sizing: border-box;
  6170. }
  6171. .people_nav,
  6172. .people_top_right {
  6173. /* padding: 20px 0 0 20px; */
  6174. }
  6175. .people_top_right {
  6176. height: 40px;
  6177. margin-bottom: 10px;
  6178. }
  6179. .people_search {
  6180. display: flex;
  6181. position: relative;
  6182. }
  6183. .people_search>>>.el-input__inner {
  6184. /* height: 25px; */
  6185. width: 95%;
  6186. }
  6187. .search_img {
  6188. width: 20px;
  6189. height: 20px;
  6190. position: absolute;
  6191. right: 30px;
  6192. top: 50%;
  6193. transform: translateY(-50%);
  6194. }
  6195. .search_img>img {
  6196. width: 100%;
  6197. height: 100%;
  6198. }
  6199. .people_name {
  6200. display: flex;
  6201. justify-content: flex-start;
  6202. padding: 20px 0 0 25px;
  6203. flex-direction: column;
  6204. flex-wrap: wrap;
  6205. }
  6206. .people_name>>>.el-checkbox {
  6207. width: 100%;
  6208. display: flex;
  6209. align-items: center;
  6210. margin-bottom: 10px;
  6211. }
  6212. .people_name>>>.el-checkbox__label {
  6213. text-overflow: ellipsis;
  6214. overflow: hidden;
  6215. width: 100%;
  6216. }
  6217. .right_img {
  6218. width: 150px;
  6219. height: 150px;
  6220. margin: 0 auto;
  6221. }
  6222. .right_img>img {
  6223. width: 100%;
  6224. height: 100%;
  6225. }
  6226. .number {
  6227. margin-top: 20px;
  6228. color: #4aa6ff;
  6229. text-decoration: underline;
  6230. }
  6231. .success_button {
  6232. display: flex;
  6233. text-align: center;
  6234. margin: 5% 0 auto;
  6235. flex-direction: row;
  6236. justify-content: center;
  6237. }
  6238. .look_course {
  6239. margin-right: 40px;
  6240. background: #3d67bc;
  6241. width: 200px;
  6242. height: 35px;
  6243. line-height: 35px;
  6244. color: #fff;
  6245. text-align: center;
  6246. font-size: 14px;
  6247. border-radius: 5px;
  6248. cursor: pointer;
  6249. }
  6250. .attend_others {
  6251. width: 250px;
  6252. background: #4fb13c;
  6253. height: 35px;
  6254. line-height: 35px;
  6255. color: #fff;
  6256. text-align: center;
  6257. font-size: 14px;
  6258. border-radius: 5px;
  6259. cursor: pointer;
  6260. }
  6261. .dialog_diy2>>>.el-dialog__body {
  6262. text-align: center;
  6263. }
  6264. .write_togother {
  6265. position: absolute;
  6266. right: 45px;
  6267. display: flex;
  6268. top: 5%;
  6269. }
  6270. .write_people {
  6271. font-size: 14px;
  6272. line-height: 50px;
  6273. padding-right: 10px;
  6274. }
  6275. .end_write {
  6276. background: #3d67bc;
  6277. color: #fff;
  6278. width: 100px;
  6279. height: 35px;
  6280. line-height: 35px;
  6281. text-align: center;
  6282. font-size: 14px;
  6283. border-radius: 5px;
  6284. cursor: pointer;
  6285. }
  6286. .chapter_upload {
  6287. height: 50px;
  6288. margin-top: 12px;
  6289. position: relative;
  6290. display: flex;
  6291. align-items: center;
  6292. width: 100%;
  6293. min-height: 50px;
  6294. }
  6295. .chapter_upload_t {
  6296. background-color: #fff;
  6297. position: absolute;
  6298. height: 100%;
  6299. top: 0px;
  6300. left: 0px;
  6301. border-radius: 40px;
  6302. box-sizing: border-box;
  6303. box-shadow: 0 0 3px 3px #dfdfdf;
  6304. }
  6305. .chapter_upload_o {
  6306. width: 100%;
  6307. height: 100%;
  6308. position: relative;
  6309. z-index: 1;
  6310. }
  6311. .chapter_upload_ic {
  6312. height: 30px;
  6313. float: right;
  6314. }
  6315. .chapter_upload_ic_l {
  6316. width: 50px;
  6317. height: 50px;
  6318. float: left;
  6319. }
  6320. .chapter_upload_ic_l div {
  6321. width: 30px;
  6322. height: 35px;
  6323. background: url("../../assets/icon/icon.png");
  6324. }
  6325. .chapter_upload_ic_r {
  6326. width: 50px;
  6327. height: 50px;
  6328. float: left;
  6329. margin-left: 0px;
  6330. display: flex;
  6331. align-items: center;
  6332. }
  6333. .chapter_upload_ic_r div {
  6334. width: 25px;
  6335. height: 25px;
  6336. background-image: url("../../assets/delete.png");
  6337. background-size: 100% 100%;
  6338. }
  6339. .chapter_upload_n {
  6340. display: flex;
  6341. text-indent: 10px;
  6342. text-decoration: none;
  6343. text-overflow: ellipsis;
  6344. white-space: nowrap;
  6345. overflow: hidden;
  6346. width: 55%;
  6347. margin-left: 10px;
  6348. cursor: pointer;
  6349. margin-top: 2px;
  6350. }
  6351. .chapter_upload_l_i1 {
  6352. background-image: url("../../assets/icon/video.png");
  6353. width: 28px;
  6354. height: 28px;
  6355. background-size: 100% 100%;
  6356. }
  6357. .chapter_upload_l_i5 {
  6358. background-image: url("../../assets/icon/word.png");
  6359. width: 24px;
  6360. height: 24px;
  6361. background-size: 100% 100%;
  6362. }
  6363. .chapter_upload_l_i8 {
  6364. background-image: url("../../assets/icon/line.png");
  6365. width: 24px;
  6366. height: 24px;
  6367. background-size: 100% 100%;
  6368. }
  6369. .chapter_upload_ud {
  6370. display: flex;
  6371. flex-direction: column;
  6372. margin-left: 5px;
  6373. justify-content: center;
  6374. }
  6375. .chapter_upload_up {
  6376. background-image: url("../../assets/icon/up.png");
  6377. width: 17px;
  6378. height: 15px;
  6379. background-size: 100% 100%;
  6380. cursor: pointer;
  6381. }
  6382. .chapter_upload_down {
  6383. background-image: url("../../assets/icon/down.png");
  6384. width: 17px;
  6385. height: 15px;
  6386. margin: 2px auto 0 auto;
  6387. background-size: 100% 100%;
  6388. cursor: pointer;
  6389. }
  6390. .addWordStyle {
  6391. display: flex;
  6392. flex-direction: row;
  6393. justify-content: flex-start;
  6394. overflow-x: auto;
  6395. white-space: nowrap;
  6396. flex-wrap: wrap;
  6397. }
  6398. /* table 样式 */
  6399. .cont>>>table {
  6400. border-top: 1px solid #ccc;
  6401. border-left: 1px solid #ccc;
  6402. }
  6403. .cont>>>table td,
  6404. .cont>>>table th {
  6405. border-bottom: 1px solid #ccc;
  6406. border-right: 1px solid #ccc;
  6407. /* padding: 20px 5px; */
  6408. padding: 5px 10px;
  6409. max-width: 0px;
  6410. height: 30px;
  6411. vertical-align: baseline;
  6412. }
  6413. .cont>>>table th {
  6414. border-bottom: 2px solid #ccc;
  6415. text-align: center;
  6416. }
  6417. /* blockquote 样式 */
  6418. .cont>>>blockquote {
  6419. display: block;
  6420. border-left: 8px solid #d0e5f2;
  6421. padding: 5px 10px;
  6422. margin: 10px 0;
  6423. line-height: 1.4;
  6424. font-size: 100%;
  6425. background-color: #f1f1f1;
  6426. }
  6427. /* code 样式 */
  6428. .cont>>>code {
  6429. display: inline-block;
  6430. *display: inline;
  6431. *zoom: 1;
  6432. background-color: #f1f1f1;
  6433. border-radius: 3px;
  6434. padding: 3px 5px;
  6435. margin: 0 3px;
  6436. }
  6437. .cont>>>pre code {
  6438. display: block;
  6439. }
  6440. /* ul ol 样式 */
  6441. .cont>>>ul,
  6442. ol {
  6443. margin: 10px 0 10px 20px;
  6444. }
  6445. .wordbox {
  6446. display: flex;
  6447. flex-wrap: wrap;
  6448. cursor: pointer;
  6449. width: 100%;
  6450. }
  6451. .checkword {
  6452. width: 22px;
  6453. height: 22px;
  6454. margin: 10px auto 0;
  6455. cursor: pointer;
  6456. }
  6457. .checkword img {
  6458. width: 100%;
  6459. }
  6460. .stepBg {
  6461. display: flex;
  6462. flex-direction: column;
  6463. justify-content: space-between;
  6464. align-items: center;
  6465. background: #fff;
  6466. width: 300px;
  6467. margin: 0 25px 0 0;
  6468. }
  6469. .stepTop {
  6470. min-width: 300px;
  6471. width: 300px;
  6472. /* border-radius: 10px; */
  6473. display: flex;
  6474. flex-direction: column;
  6475. justify-content: flex-start;
  6476. align-items: center;
  6477. flex-wrap: nowrap;
  6478. background: #fff;
  6479. /* top: 18%; */
  6480. }
  6481. .stepTop>div {
  6482. height: 80px;
  6483. width: 85%;
  6484. cursor: pointer;
  6485. margin: 10px 0;
  6486. border-radius: 10px;
  6487. }
  6488. .first,
  6489. .second,
  6490. .third,
  6491. .four {
  6492. background: #4a83d0;
  6493. height: 90px;
  6494. color: #fff;
  6495. display: flex;
  6496. flex-direction: row;
  6497. align-items: center;
  6498. justify-content: center;
  6499. }
  6500. .first>div:nth-child(1),
  6501. .second>div:nth-child(1),
  6502. .third>div:nth-child(1),
  6503. .four>div:nth-child(1) {
  6504. margin: 5px 10px 0 0;
  6505. width: 2rem;
  6506. }
  6507. .firstNo,
  6508. .secondNo,
  6509. .thirdNo,
  6510. .fourNo {
  6511. background: #e7e7e7;
  6512. color: #adadad;
  6513. display: flex;
  6514. flex-direction: row;
  6515. align-items: center;
  6516. justify-content: center;
  6517. }
  6518. .firstNo>div:nth-child(1),
  6519. .secondNo>div:nth-child(1),
  6520. .thirdNo>div:nth-child(1),
  6521. .fourNo>div:nth-child(1) {
  6522. margin: 5px 10px 0 0;
  6523. width: 2rem;
  6524. }
  6525. .uploadWidth>>>.el-upload {
  6526. width: 60px;
  6527. height: 60px;
  6528. position: relative;
  6529. }
  6530. .addPeople {
  6531. background: #fa6060;
  6532. width: 150px;
  6533. height: 40px;
  6534. color: #fff;
  6535. border-radius: 5px;
  6536. text-align: center;
  6537. line-height: 40px;
  6538. font-size: 14px;
  6539. cursor: pointer;
  6540. margin-top: 20px;
  6541. }
  6542. .kcImg {
  6543. width: 60px;
  6544. margin-left: 10px;
  6545. }
  6546. .zyImg {
  6547. width: 55px;
  6548. margin: 0 10px;
  6549. }
  6550. .deleteZy {
  6551. width: 20px;
  6552. position: absolute;
  6553. top: 5px;
  6554. right: 5px;
  6555. cursor: pointer;
  6556. }
  6557. .kcImg>img,
  6558. .zyImg>img,
  6559. .deleteZy>img {
  6560. width: 100%;
  6561. height: 100%;
  6562. }
  6563. .zyBox {
  6564. display: flex;
  6565. flex-direction: row;
  6566. align-items: center;
  6567. background: #67d37d;
  6568. color: #fff;
  6569. width: 210px;
  6570. margin: 20px 20px 0 0;
  6571. border-radius: 10px;
  6572. height: 70px;
  6573. position: relative;
  6574. }
  6575. .upCss {
  6576. display: flex;
  6577. flex-direction: row;
  6578. justify-content: flex-start;
  6579. }
  6580. .upCss>>>.el-icon-plus {
  6581. position: none !important;
  6582. width: 200px;
  6583. height: 100px;
  6584. display: flex;
  6585. flex-wrap: nowrap;
  6586. flex-direction: column;
  6587. align-items: center;
  6588. justify-content: center;
  6589. border: 1px dashed #ccc;
  6590. min-width: 78px;
  6591. min-height: 100px;
  6592. z-index: 999;
  6593. }
  6594. .upCss>>>.el-upload-list__item-name {
  6595. width: 100px;
  6596. white-space: nowrap;
  6597. overflow: hidden;
  6598. text-overflow: ellipsis;
  6599. }
  6600. .addStageImg {
  6601. min-width: 25px;
  6602. min-height: 25px;
  6603. width: 25px;
  6604. height: 25px;
  6605. cursor: pointer;
  6606. }
  6607. .addHW {
  6608. width: 28px;
  6609. height: 28px;
  6610. cursor: pointer;
  6611. }
  6612. .addStageImg>img,
  6613. .addHW>img {
  6614. width: 100%;
  6615. height: 100%;
  6616. }
  6617. .addNewPP>>>.el-dialog__body {
  6618. padding: 5px 20px;
  6619. }
  6620. .isHeight {
  6621. height: 680px;
  6622. }
  6623. .toolChoose {
  6624. display: flex;
  6625. /* width: 100%; */
  6626. flex-direction: row;
  6627. flex-wrap: wrap;
  6628. }
  6629. .tool {
  6630. display: flex;
  6631. flex-direction: column;
  6632. flex-wrap: nowrap;
  6633. width: fit-content;
  6634. margin: 10px 0 10px 0;
  6635. align-items: center;
  6636. }
  6637. .tool+.tool {
  6638. margin-right: 45px;
  6639. }
  6640. .whiteBIcon {
  6641. width: 80px;
  6642. cursor: pointer;
  6643. display: flex;
  6644. flex-direction: column;
  6645. flex-wrap: nowrap;
  6646. align-items: center;
  6647. }
  6648. .whiteBIcon>img,
  6649. .toolIcon>img,
  6650. .arrow>img {
  6651. width: 100%;
  6652. height: 100%;
  6653. }
  6654. .check img {
  6655. width: 20px;
  6656. height: 20px;
  6657. }
  6658. .whiteBIcon>img {
  6659. box-shadow: 0px 4px 8px 0px rgb(44 133 255 / 14%);
  6660. border-radius: 15px;
  6661. }
  6662. .check {
  6663. /* width: 20px;
  6664. height: 20px; */
  6665. cursor: pointer;
  6666. margin: 10px 0;
  6667. }
  6668. .checkDiv {
  6669. display: flex;
  6670. align-items: center;
  6671. }
  6672. .checkDiv span {
  6673. margin-left: 5px;
  6674. color: #858585;
  6675. }
  6676. .customWidth>>>.el-dialog {
  6677. min-width: 500px !important;
  6678. }
  6679. .a_addBox {
  6680. margin: 10px 0;
  6681. background: #fff;
  6682. padding: 15px;
  6683. max-height: 600px;
  6684. overflow: auto;
  6685. }
  6686. .a_add_box {
  6687. border-bottom: 2px solid #eee;
  6688. padding-bottom: 30px;
  6689. }
  6690. .a_add_head {
  6691. display: flex;
  6692. align-items: center;
  6693. justify-content: space-between;
  6694. margin: 10px 0;
  6695. font-size: 18px;
  6696. }
  6697. .a_add_checkType {
  6698. margin-top: 10px;
  6699. display: flex;
  6700. font-size: 16px;
  6701. }
  6702. .a_add_checkType span {
  6703. box-sizing: border-box;
  6704. padding: 0 0 5px 0;
  6705. cursor: pointer;
  6706. }
  6707. .a_add_checkType span+span {
  6708. margin-left: 10px;
  6709. }
  6710. .a_add_checkType .active {
  6711. border-bottom: 2px solid #409eff;
  6712. color: #409eff;
  6713. }
  6714. .a_add_head .a_add_head_input {
  6715. width: 300px;
  6716. }
  6717. .a_add_head .a_add_head_div {
  6718. display: flex;
  6719. align-items: center;
  6720. justify-content: space-between;
  6721. }
  6722. .a_add_body {
  6723. display: flex;
  6724. /* align-items: center; */
  6725. align-items: flex-end;
  6726. }
  6727. .a_add_input {
  6728. display: flex;
  6729. align-items: center;
  6730. flex-wrap: wrap;
  6731. }
  6732. .a_add_input_choice {
  6733. flex-direction: column;
  6734. margin-right: 10px;
  6735. }
  6736. .a_add_input_choice>>>.el-radio {
  6737. display: flex;
  6738. align-items: center;
  6739. flex-direction: row-reverse;
  6740. margin: 30px 0 0 0;
  6741. }
  6742. .a_add_input_choice>>>.el-checkbox {
  6743. display: flex;
  6744. align-items: center;
  6745. flex-direction: row-reverse;
  6746. margin: 30px 0 0 0;
  6747. }
  6748. .width100 {
  6749. width: 100%;
  6750. }
  6751. .a_add_input .a_add_persent {
  6752. width: 100%;
  6753. }
  6754. .a_add_persent_div {
  6755. width: 100%;
  6756. display: flex;
  6757. align-items: center;
  6758. }
  6759. .a_add_persent_div span {
  6760. margin: 5px 0;
  6761. }
  6762. .a_add_persent_div span:nth-child(1) {
  6763. width: 30%;
  6764. }
  6765. .a_add_persent_div span:nth-child(2) {
  6766. width: 7%;
  6767. }
  6768. .a_add_persent_div span:nth-child(3) {
  6769. width: 40%;
  6770. }
  6771. .a_add_body_div {
  6772. display: flex;
  6773. align-items: center;
  6774. justify-content: center;
  6775. /* flex-direction: column; */
  6776. }
  6777. .all_choose {
  6778. display: flex;
  6779. flex-direction: row;
  6780. align-items: flex-start;
  6781. width: 100%;
  6782. }
  6783. .all_choose>span {
  6784. width: 100px;
  6785. display: block;
  6786. letter-spacing: 14px;
  6787. white-space: nowrap;
  6788. overflow: hidden;
  6789. text-overflow: ellipsis;
  6790. }
  6791. .all_choose>>>.el-checkbox-group {
  6792. display: flex;
  6793. flex-direction: row;
  6794. width: 100%;
  6795. flex-wrap: wrap;
  6796. align-content: center;
  6797. justify-content: flex-start;
  6798. align-items: center;
  6799. margin-top: 3px;
  6800. }
  6801. .all_choose>.el-checkbox-group>>>.el-checkbox {
  6802. margin-bottom: 10px;
  6803. display: flex;
  6804. flex-direction: row;
  6805. align-items: center;
  6806. }
  6807. .all_choose>.el-checkbox-group>.el-checkbox>>>.el-checkbox__label {
  6808. min-width: 80px;
  6809. overflow: hidden;
  6810. width: 80px;
  6811. text-overflow: ellipsis;
  6812. white-space: nowrap;
  6813. }
  6814. .all_choose>.el-checkbox-group>.el-checkbox>>>.el-checkbox__label:hover {
  6815. width: auto;
  6816. }
  6817. .choose>div:nth-child(3)>span {
  6818. /* letter-spacing: 0 !important; */
  6819. }
  6820. .choose {
  6821. display: flex;
  6822. flex-direction: column;
  6823. flex-wrap: nowrap;
  6824. height: 100%;
  6825. justify-content: space-evenly;
  6826. align-items: flex-start;
  6827. }
  6828. .both {
  6829. display: flex;
  6830. flex-direction: row;
  6831. flex-wrap: wrap;
  6832. width: 100%;
  6833. align-items: center;
  6834. justify-content: flex-start;
  6835. margin: 30px 0;
  6836. }
  6837. .notice>>>.el-dialog {
  6838. width: 500px !important;
  6839. text-align: center;
  6840. }
  6841. .notice>>>.el-button {
  6842. margin-top: 20px;
  6843. }
  6844. .whiteBg {
  6845. background: #fff;
  6846. border-radius: 10px;
  6847. }
  6848. .chooseWho {
  6849. display: flex;
  6850. width: 380px;
  6851. flex-direction: row;
  6852. flex-wrap: nowrap;
  6853. justify-content: space-between;
  6854. padding-bottom: 10px;
  6855. }
  6856. .chooseWho>div {
  6857. cursor: pointer;
  6858. padding-bottom: 10px;
  6859. font-weight: bold;
  6860. }
  6861. .isChooseActive {
  6862. color: #3e88f4;
  6863. border-bottom: 2px solid #2f80f3;
  6864. }
  6865. .toolSort {
  6866. display: flex;
  6867. flex-direction: row;
  6868. flex-wrap: wrap;
  6869. justify-content: flex-start;
  6870. align-items: flex-start;
  6871. }
  6872. .toolSort>div {
  6873. margin-right: 45px;
  6874. }
  6875. .tools {
  6876. width: 100%;
  6877. display: flex;
  6878. flex-direction: column;
  6879. flex-wrap: nowrap;
  6880. align-items: flex-start;
  6881. }
  6882. .leftTools,
  6883. .rightTools {
  6884. width: 50%;
  6885. }
  6886. .rightTools {
  6887. display: flex;
  6888. flex-direction: row;
  6889. flex-wrap: nowrap;
  6890. justify-content: space-around;
  6891. }
  6892. .firstToolList {
  6893. display: flex;
  6894. flex-direction: column;
  6895. flex-wrap: nowrap;
  6896. align-items: center;
  6897. }
  6898. .iconList {
  6899. display: flex;
  6900. flex-direction: row;
  6901. flex-wrap: wrap;
  6902. justify-content: flex-start;
  6903. align-items: center;
  6904. margin: 20px 0 5px 0;
  6905. width: 240px;
  6906. min-width: 240px;
  6907. }
  6908. .iconTool {
  6909. display: flex;
  6910. flex-direction: column;
  6911. flex-wrap: nowrap;
  6912. align-items: center;
  6913. justify-content: flex-start;
  6914. margin: 15px 10px;
  6915. }
  6916. .toolIcon {
  6917. width: 50px;
  6918. }
  6919. .taskBorder {
  6920. border: 1px solid #e1e1e1;
  6921. border-radius: 10px;
  6922. margin-top: 20px;
  6923. min-height: 1160px;
  6924. position: relative;
  6925. background: #fbfbfb;
  6926. }
  6927. .smallTaskBorder {
  6928. height: 170px;
  6929. min-height: 170px !important;
  6930. overflow: hidden;
  6931. }
  6932. .taskBorder>div {
  6933. padding: 30px 0 10px 30px;
  6934. }
  6935. .addTaskBorder {
  6936. border: 2px solid #e1e1e1;
  6937. border-radius: 10px;
  6938. margin-top: 25px;
  6939. cursor: pointer;
  6940. }
  6941. .addTaskBorder>div {
  6942. margin: 0 auto;
  6943. display: flex;
  6944. align-items: center;
  6945. justify-content: center;
  6946. }
  6947. .addTaskBorder>div>img {
  6948. width: 100px;
  6949. }
  6950. .addTaskBorder>div>span {
  6951. font-size: 23px;
  6952. color: #dbdbdb;
  6953. }
  6954. .funBlock {
  6955. display: flex;
  6956. padding: 15px 0;
  6957. flex-direction: row;
  6958. justify-content: flex-end;
  6959. align-items: center;
  6960. position: absolute;
  6961. right: 15px;
  6962. bottom: 35px;
  6963. }
  6964. .fold {
  6965. display: flex;
  6966. margin: 0 10px;
  6967. flex-direction: row;
  6968. align-items: center;
  6969. cursor: pointer;
  6970. }
  6971. .arrow {
  6972. width: 15px;
  6973. height: 15px;
  6974. margin-left: 10px;
  6975. }
  6976. .addToolFun {
  6977. display: flex;
  6978. width: 150px;
  6979. flex-direction: row;
  6980. align-items: center;
  6981. justify-content: center;
  6982. border: 1px dashed;
  6983. border-radius: 5px;
  6984. height: 50px;
  6985. margin: 35px auto 0;
  6986. cursor: pointer;
  6987. }
  6988. .addToolImg {
  6989. width: 30px;
  6990. height: 30px;
  6991. margin-right: 20px;
  6992. }
  6993. .addToolsDia>>>.el-dialog__body {
  6994. padding: 20px;
  6995. }
  6996. .addToolsDia>>>.el-dialog__body>.toolChoose {
  6997. padding: 0;
  6998. }
  6999. .addToolsDia>>>.el-dialog__body>.toolChoose>.leftTools {
  7000. padding: 0;
  7001. border-bottom: none;
  7002. margin-bottom: 0;
  7003. }
  7004. .addToolsDia>>>.el-dialog__body>.toolChoose>.leftTools>.chooseWho {
  7005. width: 100%;
  7006. }
  7007. .lineCss>>>.el-form-item__label {
  7008. width: auto !important;
  7009. }
  7010. .lineCss>>>.el-form-item__content {
  7011. margin-left: 50px !important;
  7012. }
  7013. .newSteps {
  7014. display: flex;
  7015. width: 100% !important;
  7016. height: 80px;
  7017. cursor: pointer;
  7018. margin: 10px 0;
  7019. border-radius: 10px;
  7020. flex-direction: row;
  7021. align-content: center;
  7022. justify-content: center;
  7023. align-items: center;
  7024. margin: 0 !important;
  7025. }
  7026. /* 评价样式 */
  7027. .elist_css {
  7028. padding-bottom: 60px !important;
  7029. }
  7030. .elist_title {
  7031. margin-bottom: 10px;
  7032. }
  7033. .elist_input {}
  7034. .elist_input_box {
  7035. display: flex;
  7036. align-items: center;
  7037. flex-wrap: wrap;
  7038. }
  7039. .elist_input_box+.elist_input_box {
  7040. margin-top: 30px;
  7041. }
  7042. .elist_input .elist_input_box input {
  7043. font: inherit;
  7044. color: currentColor;
  7045. /* width: 200px; */
  7046. max-width: 200px;
  7047. padding: 8px 14px;
  7048. display: block;
  7049. min-width: 0;
  7050. outline: none;
  7051. border: 1px solid rgba(0, 0, 0, 0.23);
  7052. border-radius: 4px;
  7053. box-sizing: border-box;
  7054. background: #fff;
  7055. margin: 0 20px 0 0;
  7056. }
  7057. .elist_input .elist_input_box span {
  7058. height: 36px;
  7059. line-height: 36px;
  7060. color: rgb(82, 82, 82);
  7061. min-width: 80px;
  7062. }
  7063. .elist_input .elist_input_box .remove {
  7064. height: 20px;
  7065. width: 20px;
  7066. background-size: 100% 100%;
  7067. background-position: unset;
  7068. margin-left: 5px;
  7069. }
  7070. .elist_input_box>>>.el-rate {
  7071. display: flex;
  7072. height: 36px;
  7073. align-items: center;
  7074. }
  7075. .elist_input_box .elist_inptu_text {
  7076. width: 100%;
  7077. display: flex;
  7078. align-items: center;
  7079. margin-top: 10px;
  7080. }
  7081. .elist_input_box .elist_inptu_text input {
  7082. /* width: 500px; */
  7083. width: 100%;
  7084. max-width: unset;
  7085. }
  7086. .elist_input_box>>>.el-rate__icon {
  7087. font-size: 24px;
  7088. }
  7089. .elist_btn {
  7090. margin-top: 10px;
  7091. }
  7092. .lineTitle {
  7093. margin-top: 15px;
  7094. width: 110px;
  7095. }
  7096. .courseTop {
  7097. display: flex;
  7098. flex-direction: row;
  7099. justify-content: flex-start;
  7100. align-items: center;
  7101. /* width: 100%; */
  7102. width: calc(100% - 20px);
  7103. /* background: rgb(255, 255, 255); */
  7104. /* border-radius: 10px; */
  7105. padding: 20px 0;
  7106. }
  7107. .stepsNav {
  7108. display: flex;
  7109. flex-direction: row;
  7110. justify-content: flex-start;
  7111. align-items: center;
  7112. }
  7113. .stepsWord {
  7114. font-size: 18px;
  7115. color: #fff;
  7116. font-weight: bold;
  7117. margin-left: auto;
  7118. background: rgb(15, 126, 255);
  7119. border-radius: 5px;
  7120. padding: 3px 25px;
  7121. box-sizing: border-box;
  7122. }
  7123. .rightBox {
  7124. width: calc(100% - 20px);
  7125. background: rgb(255, 255, 255);
  7126. border-radius: 10px;
  7127. overflow: auto;
  7128. height: calc(100% - 130px);
  7129. position: relative;
  7130. }
  7131. .e_add_top {
  7132. display: flex;
  7133. justify-content: space-between;
  7134. padding: 20px 20px 0 20px;
  7135. border-radius: 3px;
  7136. background: #fff;
  7137. }
  7138. .e_add_title2 {
  7139. display: flex;
  7140. align-items: center;
  7141. }
  7142. .e_add_title2 span {
  7143. width: 40px;
  7144. }
  7145. .e_add_title {
  7146. display: flex;
  7147. align-items: center;
  7148. color: #b8b8b8;
  7149. font-size: 18px;
  7150. position: relative;
  7151. height: 40px;
  7152. }
  7153. .e_add_title span {
  7154. margin-right: 10px;
  7155. }
  7156. .e_add_title .el_input {
  7157. width: 300px;
  7158. }
  7159. .e_add_title>>>.el-input__inner {
  7160. width: 400px;
  7161. }
  7162. .e_add_btn {}
  7163. .e_add_content {
  7164. display: flex;
  7165. width: 100%;
  7166. }
  7167. .e_add_list {
  7168. background: #fff;
  7169. height: 500px;
  7170. width: 210px;
  7171. position: relative;
  7172. margin: 15px 5px 0 0;
  7173. flex-shrink: 0;
  7174. display: flex;
  7175. flex-direction: column;
  7176. }
  7177. .e_add_list_title {
  7178. font-size: 20px;
  7179. width: 100%;
  7180. box-sizing: border-box;
  7181. padding: 15px 40px;
  7182. text-align: center;
  7183. border-bottom: 1px solid #eaeaea;
  7184. position: relative;
  7185. display: flex;
  7186. align-items: center;
  7187. justify-content: center;
  7188. height: 57px;
  7189. background: #f6f6f6;
  7190. }
  7191. .e_add_list_title span {
  7192. overflow: hidden;
  7193. white-space: nowrap;
  7194. text-overflow: ellipsis;
  7195. }
  7196. .e_add_list_title img {
  7197. position: absolute;
  7198. right: 15px;
  7199. width: 25px;
  7200. cursor: pointer;
  7201. top: 50%;
  7202. transform: translateY(-50%);
  7203. }
  7204. .e_add_list_body {
  7205. height: calc(100% - 187px);
  7206. overflow: auto;
  7207. }
  7208. .e_add_list_child {
  7209. width: 100%;
  7210. display: flex;
  7211. align-items: center;
  7212. justify-content: center;
  7213. position: relative;
  7214. box-sizing: border-box;
  7215. padding: 15px 40px;
  7216. text-align: center;
  7217. }
  7218. .e_add_list_child span {
  7219. overflow: hidden;
  7220. white-space: nowrap;
  7221. text-overflow: ellipsis;
  7222. cursor: pointer;
  7223. }
  7224. .e_add_list_child img {
  7225. position: absolute;
  7226. right: 10px;
  7227. width: 21px;
  7228. cursor: pointer;
  7229. top: 50%;
  7230. transform: translateY(-50%);
  7231. }
  7232. .e_add_list_child+.e_add_list_child {
  7233. border-top: 1px solid #eaeaea;
  7234. }
  7235. .e_add_list_child .active {
  7236. color: #409eff;
  7237. }
  7238. .e_add_list_btn {
  7239. position: absolute;
  7240. bottom: 0;
  7241. height: 50px;
  7242. background: rgb(120, 120, 254);
  7243. width: 100%;
  7244. color: #fff;
  7245. font-size: 16px;
  7246. text-align: center;
  7247. line-height: 50px;
  7248. cursor: pointer;
  7249. }
  7250. .e_add_list_detail {
  7251. position: absolute;
  7252. bottom: 0;
  7253. height: 130px;
  7254. background: rgb(120, 120, 254);
  7255. width: 100%;
  7256. color: #fff;
  7257. font-size: 16px;
  7258. display: flex;
  7259. align-items: center;
  7260. justify-content: center;
  7261. }
  7262. .e_add_list_detail textarea {
  7263. height: 90%;
  7264. width: 95%;
  7265. border: none;
  7266. resize: none;
  7267. outline: none;
  7268. padding: 5px;
  7269. box-sizing: border-box;
  7270. }
  7271. .e_add_list_pbox {
  7272. width: 100%;
  7273. }
  7274. .e_add_list_pbox_title {
  7275. height: 50px;
  7276. background: #fff;
  7277. display: flex;
  7278. align-items: center;
  7279. width: 100%;
  7280. box-sizing: border-box;
  7281. padding: 0 20px;
  7282. flex-direction: row;
  7283. flex-wrap: wrap;
  7284. }
  7285. .type_title {
  7286. font-size: 18px;
  7287. font-weight: 700;
  7288. }
  7289. .type_content {
  7290. font-size: 16px;
  7291. margin-left: 30px;
  7292. }
  7293. .type_content span+span {
  7294. margin-left: 20px;
  7295. }
  7296. .type_content span {
  7297. cursor: pointer;
  7298. padding-bottom: 5px;
  7299. box-sizing: border-box;
  7300. }
  7301. .type_content .active {
  7302. color: #409eff;
  7303. border-bottom: 2px solid #409eff;
  7304. }
  7305. .e_add_list_pbox_content {
  7306. height: calc(100% - 50px);
  7307. display: flex;
  7308. align-items: center;
  7309. width: 100%;
  7310. background: #fff;
  7311. }
  7312. .mbCss {
  7313. width: 100%;
  7314. display: flex;
  7315. flex-direction: row;
  7316. flex-wrap: nowrap;
  7317. align-content: center;
  7318. align-items: flex-start;
  7319. justify-content: flex-start;
  7320. }
  7321. .pjCss {
  7322. /* width: 42%; */
  7323. width: calc(100% - 55%);
  7324. display: flex;
  7325. flex-direction: column;
  7326. flex-wrap: nowrap;
  7327. align-items: flex-start;
  7328. margin-top: 1.5%;
  7329. }
  7330. .e_box {
  7331. display: flex;
  7332. flex-wrap: wrap;
  7333. max-height: 500px;
  7334. align-items: flex-start;
  7335. overflow: auto;
  7336. }
  7337. .e_card {
  7338. border: 1px solid #ccc;
  7339. background: #fff;
  7340. margin-right: 20px;
  7341. width: 270px;
  7342. display: flex;
  7343. flex-direction: column;
  7344. align-items: center;
  7345. border-radius: 5px;
  7346. margin-top: 10px;
  7347. text-align: center;
  7348. }
  7349. .e_card_picture {
  7350. margin: 10px 0;
  7351. }
  7352. .e_card_picture>img {
  7353. width: 50px;
  7354. }
  7355. .e_card_name {
  7356. width: 100%;
  7357. padding: 0 10px;
  7358. box-sizing: border-box;
  7359. margin-bottom: 10px;
  7360. overflow: hidden;
  7361. text-overflow: ellipsis;
  7362. white-space: nowrap;
  7363. }
  7364. .e_card_time {
  7365. width: 100%;
  7366. padding: 0 10px;
  7367. box-sizing: border-box;
  7368. font-size: 15px;
  7369. color: #c3c3c3;
  7370. margin-bottom: 10px;
  7371. }
  7372. .e_card_btn {
  7373. height: 40px;
  7374. display: flex;
  7375. align-items: center;
  7376. width: 100%;
  7377. background: rgb(244, 244, 244);
  7378. }
  7379. .e_card_btn:hover {
  7380. background: rgb(221 221 221);
  7381. }
  7382. .e_card_btn span {
  7383. flex: 1 1 auto;
  7384. text-align: center;
  7385. cursor: pointer;
  7386. }
  7387. .addEva {
  7388. border: 1px solid #ccc;
  7389. background: #fff;
  7390. margin-right: 20px;
  7391. width: 270px;
  7392. height: 149px;
  7393. display: flex;
  7394. flex-direction: column;
  7395. align-items: center;
  7396. border-radius: 5px;
  7397. margin-top: 10px;
  7398. text-align: center;
  7399. cursor: pointer;
  7400. justify-content: center;
  7401. }
  7402. .addEva>img {
  7403. width: 50px;
  7404. object-fit: cover;
  7405. }
  7406. .uploadFm {
  7407. border: 1px dashed #ccc;
  7408. width: 202px;
  7409. height: 102px;
  7410. position: relative;
  7411. cursor: pointer;
  7412. }
  7413. .uploadFm>img {
  7414. position: absolute;
  7415. top: 25px;
  7416. left: 35%;
  7417. width: 50px;
  7418. }
  7419. .fileCss {
  7420. width: 100%;
  7421. display: flex;
  7422. flex-direction: row;
  7423. flex-wrap: nowrap;
  7424. justify-content: space-around;
  7425. align-items: center;
  7426. padding-top: 15px;
  7427. }
  7428. .sysPicBox {
  7429. display: flex;
  7430. flex-direction: row;
  7431. flex-wrap: wrap;
  7432. align-content: flex-start;
  7433. height: 435px;
  7434. overflow: auto;
  7435. }
  7436. .sysPic {
  7437. width: 200px;
  7438. height: 115px;
  7439. margin: 0 20px 20px 0;
  7440. cursor: pointer;
  7441. }
  7442. .sysPic>img,
  7443. .isSysPic>img,
  7444. .deletePic>img {
  7445. width: 100%;
  7446. height: 100%;
  7447. object-fit: cover;
  7448. }
  7449. .isSysPic {
  7450. width: 200px;
  7451. height: 115px;
  7452. position: relative;
  7453. }
  7454. .deletePic {
  7455. width: 20px;
  7456. height: 20px;
  7457. position: absolute;
  7458. top: 0;
  7459. right: 0;
  7460. cursor: pointer;
  7461. }
  7462. .select_box1 {}
  7463. .select_box1_img {
  7464. background: #fff;
  7465. border-radius: 5px;
  7466. padding: 15px;
  7467. box-sizing: border-box;
  7468. margin-bottom: 20px;
  7469. }
  7470. .select_box1_title {
  7471. padding: 0 0 15px 0;
  7472. border-bottom: 1px solid #eee;
  7473. margin-bottom: 15px;
  7474. }
  7475. .select_box1_title span:nth-child(1) {
  7476. font-size: 16px;
  7477. margin-right: 20px;
  7478. color: #000;
  7479. }
  7480. .select_box1_title span:nth-child(2) {
  7481. font-size: 14px;
  7482. color: rgb(112, 112, 112);
  7483. }
  7484. .select_box1_add_img {}
  7485. .select_box1_select {
  7486. background: #fff;
  7487. border-radius: 5px;
  7488. padding: 15px;
  7489. box-sizing: border-box;
  7490. }
  7491. .select_box2 {}
  7492. .select_box2_title {
  7493. background: #fff;
  7494. border-radius: 5px;
  7495. padding: 5px 10px;
  7496. box-sizing: border-box;
  7497. margin-bottom: 10px;
  7498. }
  7499. .select_box2_box {
  7500. display: flex;
  7501. height: 500px;
  7502. }
  7503. .select_box2_img {
  7504. width: calc(100% - 310px);
  7505. height: 100%;
  7506. overflow: auto;
  7507. background: #fff;
  7508. border-radius: 5px;
  7509. }
  7510. .select_box2_img img {
  7511. width: 100%;
  7512. }
  7513. .select_box2_answer {
  7514. background: #fff;
  7515. margin-left: 10px;
  7516. border-radius: 5px;
  7517. width: 300px;
  7518. overflow: auto;
  7519. height: 100%;
  7520. display: flex;
  7521. flex-direction: column;
  7522. align-items: center;
  7523. padding-top: 10px;
  7524. box-sizing: border-box;
  7525. }
  7526. .select_box2_answer_box {
  7527. margin: 0 0 10px 0;
  7528. width: 85%;
  7529. }
  7530. .rate_textarea {
  7531. font: inherit;
  7532. color: currentColor;
  7533. width: 100%;
  7534. padding: 8px 14px;
  7535. display: block;
  7536. min-width: 0;
  7537. outline: none;
  7538. border: 1px solid rgba(0, 0, 0, 0.23);
  7539. border-radius: 4px;
  7540. box-sizing: border-box;
  7541. background: #fff;
  7542. margin: 0 20px 0 0;
  7543. resize: none;
  7544. }
  7545. .select_answer_title {
  7546. text-align: left;
  7547. width: 85%;
  7548. margin-bottom: 10px;
  7549. font-size: 18px;
  7550. color: #8e8e8e;
  7551. }
  7552. .mask {
  7553. background-color: rgb(0 0 0 / 30%);
  7554. /* position: fixed; */
  7555. position: absolute;
  7556. top: 0;
  7557. left: 0;
  7558. width: 100%;
  7559. height: 100%;
  7560. z-index: 90;
  7561. display: flex;
  7562. align-items: center;
  7563. justify-content: center;
  7564. }
  7565. .progressBox {
  7566. width: 300px;
  7567. height: 150px;
  7568. background: #fff;
  7569. border-radius: 10px;
  7570. box-shadow: 0 0 6px 1px #bfbfbf;
  7571. display: flex;
  7572. align-items: center;
  7573. justify-content: center;
  7574. flex-direction: column;
  7575. }
  7576. .progressBox .lbox {
  7577. height: 100px;
  7578. font-size: 16px;
  7579. display: flex;
  7580. align-items: center;
  7581. }
  7582. .progressBox .lbox img {
  7583. width: 40px;
  7584. margin-right: 20px;
  7585. }
  7586. .progressBox>>>.el-progress-bar__outer {
  7587. background-color: #d1dfff !important;
  7588. }
  7589. .progressBox .lbox {
  7590. height: 100px;
  7591. font-size: 19px;
  7592. display: flex;
  7593. align-items: center;
  7594. }
  7595. .progressBox .lbox img {
  7596. width: 40px;
  7597. margin-right: 20px;
  7598. }
  7599. .updateTips::after {
  7600. content: "协同编辑课程暂不支持修改基本信息,只支持修改阶段内容。";
  7601. font-size: 14px;
  7602. margin-left: 20px;
  7603. font-weight: 400;
  7604. color: #ff3a3a;
  7605. }
  7606. .updateMask {
  7607. width: 100%;
  7608. z-index: 3;
  7609. top: 0;
  7610. position: absolute;
  7611. /* background-color: rgba(0,0,0,.3); */
  7612. }
  7613. .t_j_box {
  7614. display: flex;
  7615. }
  7616. .t_j_box span:nth-child(1) {
  7617. width: 15%;
  7618. overflow: hidden;
  7619. margin-right: 10px;
  7620. text-overflow: ellipsis;
  7621. white-space: nowrap;
  7622. }
  7623. .t_j_box span:nth-child(2) {
  7624. width: 30%;
  7625. overflow: hidden;
  7626. text-overflow: ellipsis;
  7627. margin-right: 10px;
  7628. }
  7629. .t_j_box span:nth-child(3) {
  7630. max-width: calc(55% - 20px);
  7631. overflow: hidden;
  7632. text-overflow: ellipsis;
  7633. }
  7634. .sentenBox {
  7635. background: #fff;
  7636. height: 600px;
  7637. overflow: auto;
  7638. background-image: url("../../assets/icon/conSentences/csBg.png");
  7639. background-position: 102%;
  7640. background-repeat: no-repeat;
  7641. background-size: 60%;
  7642. }
  7643. .addSen {
  7644. background: #409efe;
  7645. width: 90px;
  7646. color: #fff;
  7647. height: 35px;
  7648. text-align: center;
  7649. line-height: 35px;
  7650. border-radius: 5px;
  7651. float: right;
  7652. margin: 10px 20px 0 0;
  7653. cursor: pointer;
  7654. }
  7655. .sentenTop {
  7656. display: flex;
  7657. flex-direction: row;
  7658. flex-wrap: nowrap;
  7659. align-items: center;
  7660. }
  7661. .sentenTop>div:nth-child(2) {
  7662. width: 300px;
  7663. margin: 0 15px;
  7664. }
  7665. .sentenTop>div:nth-child(3) {
  7666. background: #409efe;
  7667. color: #fff;
  7668. width: 65px;
  7669. height: 35px;
  7670. text-align: center;
  7671. line-height: 35px;
  7672. border-radius: 5px;
  7673. cursor: pointer;
  7674. }
  7675. .cardList {
  7676. padding: 30px 0 20px 0;
  7677. display: flex;
  7678. flex-direction: row;
  7679. flex-wrap: wrap;
  7680. align-items: center;
  7681. box-sizing: border-box;
  7682. border-bottom: 1px solid #f4f4f4;
  7683. width: 98%;
  7684. margin: 0 auto;
  7685. }
  7686. .cardBox {
  7687. display: flex;
  7688. flex-direction: row;
  7689. flex-wrap: wrap;
  7690. align-items: center;
  7691. align-content: center;
  7692. }
  7693. .isCard,
  7694. .isCard1 {
  7695. width: 140px;
  7696. height: 65px;
  7697. text-align: center;
  7698. line-height: 65px;
  7699. font-size: 20px;
  7700. cursor: pointer;
  7701. background-image: url("../../assets/icon/conSentences/titleBorder.png");
  7702. background-size: cover;
  7703. position: relative;
  7704. z-index: 99;
  7705. }
  7706. .isCard1 {
  7707. background-image: url("../../assets/icon/conSentences/answerBorder.png");
  7708. }
  7709. .isCard:hover .deleteWord {
  7710. display: block;
  7711. }
  7712. .isCard>div:nth-child(1),
  7713. .isCard1>div:nth-child(1) {
  7714. white-space: nowrap;
  7715. overflow: hidden;
  7716. text-overflow: ellipsis;
  7717. width: 80%;
  7718. margin: 0 auto;
  7719. }
  7720. .card {
  7721. width: 140px;
  7722. height: 65px;
  7723. }
  7724. .card>img {
  7725. width: 100%;
  7726. height: 100%;
  7727. }
  7728. .rightCardBox {
  7729. margin: 10px 0 0 10px;
  7730. }
  7731. .rightCardBox>div:nth-child(1) {
  7732. margin-bottom: 10px;
  7733. }
  7734. .cardCss {
  7735. display: flex;
  7736. flex-direction: column;
  7737. flex-wrap: nowrap;
  7738. align-items: center;
  7739. border-bottom: 3px solid #b4c3d3;
  7740. padding: 0 0 5px 0;
  7741. margin-right: 10px;
  7742. }
  7743. .cardCss>div:nth-child(2) {
  7744. background: #5b7b9d;
  7745. color: #fff;
  7746. width: 20px;
  7747. height: 20px;
  7748. border-radius: 50%;
  7749. text-align: center;
  7750. line-height: 20px;
  7751. }
  7752. .sentenTopBox {
  7753. display: flex;
  7754. flex-direction: row;
  7755. flex-wrap: nowrap;
  7756. align-items: center;
  7757. justify-content: space-between;
  7758. padding: 55px 0 0 20px;
  7759. box-sizing: border-box;
  7760. width: 85%;
  7761. }
  7762. .stepsBottom {
  7763. width: 270px;
  7764. margin-bottom: 20px;
  7765. box-shadow: 0 0 10px 10px #f7f7f7;
  7766. background: #f7f7f7;
  7767. }
  7768. .navTop {
  7769. background: #53749b;
  7770. color: #fff;
  7771. height: 40px;
  7772. border-top-left-radius: 15px;
  7773. border-top-right-radius: 15px;
  7774. line-height: 40px;
  7775. padding-left: 15px;
  7776. font-size: 18px;
  7777. }
  7778. .navBottom {
  7779. background: #6b91b7;
  7780. height: 180px;
  7781. overflow: auto;
  7782. border-bottom-left-radius: 15px;
  7783. border-bottom-right-radius: 15px;
  7784. }
  7785. .navTask {
  7786. display: flex;
  7787. flex-direction: row;
  7788. flex-wrap: nowrap;
  7789. align-items: center;
  7790. padding: 15px 0;
  7791. cursor: pointer;
  7792. }
  7793. .isNavTask {
  7794. background: #7e9ebd;
  7795. }
  7796. .navTask>div:nth-child(1) {
  7797. background: #468fe4;
  7798. color: #fff;
  7799. width: 65px;
  7800. height: 30px;
  7801. line-height: 30px;
  7802. text-align: center;
  7803. border-radius: 5px;
  7804. margin: 0 10px 0 15px;
  7805. }
  7806. .navTask>div:nth-child(2) {
  7807. color: #fff;
  7808. max-width: 130px;
  7809. white-space: nowrap;
  7810. overflow: hidden;
  7811. text-overflow: ellipsis;
  7812. }
  7813. .groupBox {}
  7814. .groupContent+.groupContent {
  7815. margin-top: 30px;
  7816. }
  7817. .groupTitle {
  7818. font-size: 24px;
  7819. color: rgb(80, 80, 80);
  7820. margin-bottom: 20px;
  7821. }
  7822. .groupName {
  7823. display: flex;
  7824. align-items: center;
  7825. }
  7826. .groupn {
  7827. font-size: 15px;
  7828. margin-right: 10px;
  7829. }
  7830. .groupName+.groupName {
  7831. margin-top: 15px;
  7832. }
  7833. .groupBtn {
  7834. margin-left: 10px;
  7835. }
  7836. .groupContent>>>.el-input-number.is-without-controls .el-input__inner {
  7837. text-align: left;
  7838. }
  7839. .radioBox>div {
  7840. margin: 10px 0 0 10px;
  7841. }
  7842. .radioBox>>>.el-radio__input,
  7843. .radioBox>>>.el-checkbox__inner {
  7844. margin-left: 10px;
  7845. }
  7846. .radioBox>>>.el-radio__label,
  7847. .radioBox>>>.el-checkbox__label {
  7848. display: flex;
  7849. align-items: center;
  7850. }
  7851. .inImg {
  7852. width: 50px;
  7853. }
  7854. .inImg>img {
  7855. width: 100%;
  7856. height: 100%;
  7857. object-fit: cover;
  7858. }
  7859. .upCss>>>.el-upload-list--picture .el-upload-list__item {
  7860. height: auto;
  7861. }
  7862. .upCss>>>.el-upload-list--picture .el-upload-list__item-thumbnail {
  7863. width: 200px;
  7864. height: 100px;
  7865. object-fit: contain;
  7866. background: unset;
  7867. }
  7868. .upCss>>>.el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name {
  7869. display: none;
  7870. }
  7871. .tcMember+.tcMember::before {
  7872. content: '、';
  7873. }
  7874. .xzUpImg{
  7875. width: 25px;
  7876. height: 25px;
  7877. }
  7878. .xzUpImg>img{
  7879. width: 100%;
  7880. height: 100%;
  7881. }
  7882. </style>