addCourse.vue 485 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986598759885989599059915992599359945995599659975998599960006001600260036004600560066007600860096010601160126013601460156016601760186019602060216022602360246025602660276028602960306031603260336034603560366037603860396040604160426043604460456046604760486049605060516052605360546055605660576058605960606061606260636064606560666067606860696070607160726073607460756076607760786079608060816082608360846085608660876088608960906091609260936094609560966097609860996100610161026103610461056106610761086109611061116112611361146115611661176118611961206121612261236124612561266127612861296130613161326133613461356136613761386139614061416142614361446145614661476148614961506151615261536154615561566157615861596160616161626163616461656166616761686169617061716172617361746175617661776178617961806181618261836184618561866187618861896190619161926193619461956196619761986199620062016202620362046205620662076208620962106211621262136214621562166217621862196220622162226223622462256226622762286229623062316232623362346235623662376238623962406241624262436244624562466247624862496250625162526253625462556256625762586259626062616262626362646265626662676268626962706271627262736274627562766277627862796280628162826283628462856286628762886289629062916292629362946295629662976298629963006301630263036304630563066307630863096310631163126313631463156316631763186319632063216322632363246325632663276328632963306331633263336334633563366337633863396340634163426343634463456346634763486349635063516352635363546355635663576358635963606361636263636364636563666367636863696370637163726373637463756376637763786379638063816382638363846385638663876388638963906391639263936394639563966397639863996400640164026403640464056406640764086409641064116412641364146415641664176418641964206421642264236424642564266427642864296430643164326433643464356436643764386439644064416442644364446445644664476448644964506451645264536454645564566457645864596460646164626463646464656466646764686469647064716472647364746475647664776478647964806481648264836484648564866487648864896490649164926493649464956496649764986499650065016502650365046505650665076508650965106511651265136514651565166517651865196520652165226523652465256526652765286529653065316532653365346535653665376538653965406541654265436544654565466547654865496550655165526553655465556556655765586559656065616562656365646565656665676568656965706571657265736574657565766577657865796580658165826583658465856586658765886589659065916592659365946595659665976598659966006601660266036604660566066607660866096610661166126613661466156616661766186619662066216622662366246625662666276628662966306631663266336634663566366637663866396640664166426643664466456646664766486649665066516652665366546655665666576658665966606661666266636664666566666667666866696670667166726673667466756676667766786679668066816682668366846685668666876688668966906691669266936694669566966697669866996700670167026703670467056706670767086709671067116712671367146715671667176718671967206721672267236724672567266727672867296730673167326733673467356736673767386739674067416742674367446745674667476748674967506751675267536754675567566757675867596760676167626763676467656766676767686769677067716772677367746775677667776778677967806781678267836784678567866787678867896790679167926793679467956796679767986799680068016802680368046805680668076808680968106811681268136814681568166817681868196820682168226823682468256826682768286829683068316832683368346835683668376838683968406841684268436844684568466847684868496850685168526853685468556856685768586859686068616862686368646865686668676868686968706871687268736874687568766877687868796880688168826883688468856886688768886889689068916892689368946895689668976898689969006901690269036904690569066907690869096910691169126913691469156916691769186919692069216922692369246925692669276928692969306931693269336934693569366937693869396940694169426943694469456946694769486949695069516952695369546955695669576958695969606961696269636964696569666967696869696970697169726973697469756976697769786979698069816982698369846985698669876988698969906991699269936994699569966997699869997000700170027003700470057006700770087009701070117012701370147015701670177018701970207021702270237024702570267027702870297030703170327033703470357036703770387039704070417042704370447045704670477048704970507051705270537054705570567057705870597060706170627063706470657066706770687069707070717072707370747075707670777078707970807081708270837084708570867087708870897090709170927093709470957096709770987099710071017102710371047105710671077108710971107111711271137114711571167117711871197120712171227123712471257126712771287129713071317132713371347135713671377138713971407141714271437144714571467147714871497150715171527153715471557156715771587159716071617162716371647165716671677168716971707171717271737174717571767177717871797180718171827183718471857186718771887189719071917192719371947195719671977198719972007201720272037204720572067207720872097210721172127213721472157216721772187219722072217222722372247225722672277228722972307231723272337234723572367237723872397240724172427243724472457246724772487249725072517252725372547255725672577258725972607261726272637264726572667267726872697270727172727273727472757276727772787279728072817282728372847285728672877288728972907291729272937294729572967297729872997300730173027303730473057306730773087309731073117312731373147315731673177318731973207321732273237324732573267327732873297330733173327333733473357336733773387339734073417342734373447345734673477348734973507351735273537354735573567357735873597360736173627363736473657366736773687369737073717372737373747375737673777378737973807381738273837384738573867387738873897390739173927393739473957396739773987399740074017402740374047405740674077408740974107411741274137414741574167417741874197420742174227423742474257426742774287429743074317432743374347435743674377438743974407441744274437444744574467447744874497450745174527453745474557456745774587459746074617462746374647465746674677468746974707471747274737474747574767477747874797480748174827483748474857486748774887489749074917492749374947495749674977498749975007501750275037504750575067507750875097510751175127513751475157516751775187519752075217522752375247525752675277528752975307531753275337534753575367537753875397540754175427543754475457546754775487549755075517552755375547555755675577558755975607561756275637564756575667567756875697570757175727573757475757576757775787579758075817582758375847585758675877588758975907591759275937594759575967597759875997600760176027603760476057606760776087609761076117612761376147615761676177618761976207621762276237624762576267627762876297630763176327633763476357636763776387639764076417642764376447645764676477648764976507651765276537654765576567657765876597660766176627663766476657666766776687669767076717672767376747675767676777678767976807681768276837684768576867687768876897690769176927693769476957696769776987699770077017702770377047705770677077708770977107711771277137714771577167717771877197720772177227723772477257726772777287729773077317732773377347735773677377738773977407741774277437744774577467747774877497750775177527753775477557756775777587759776077617762776377647765776677677768776977707771777277737774777577767777777877797780778177827783778477857786778777887789779077917792779377947795779677977798779978007801780278037804780578067807780878097810781178127813781478157816781778187819782078217822782378247825782678277828782978307831783278337834783578367837783878397840784178427843784478457846784778487849785078517852785378547855785678577858785978607861786278637864786578667867786878697870787178727873787478757876787778787879788078817882788378847885788678877888788978907891789278937894789578967897789878997900790179027903790479057906790779087909791079117912791379147915791679177918791979207921792279237924792579267927792879297930793179327933793479357936793779387939794079417942794379447945794679477948794979507951795279537954795579567957795879597960796179627963796479657966796779687969797079717972797379747975797679777978797979807981798279837984798579867987798879897990799179927993799479957996799779987999800080018002800380048005800680078008800980108011801280138014801580168017801880198020802180228023802480258026802780288029803080318032803380348035803680378038803980408041804280438044804580468047804880498050805180528053805480558056805780588059806080618062806380648065806680678068806980708071807280738074807580768077807880798080808180828083808480858086808780888089809080918092809380948095809680978098809981008101810281038104810581068107810881098110811181128113811481158116811781188119812081218122812381248125812681278128812981308131813281338134813581368137813881398140814181428143814481458146814781488149815081518152815381548155815681578158815981608161816281638164816581668167816881698170817181728173817481758176817781788179818081818182818381848185818681878188818981908191819281938194819581968197819881998200820182028203820482058206820782088209821082118212821382148215821682178218821982208221822282238224822582268227822882298230823182328233823482358236823782388239824082418242824382448245824682478248824982508251825282538254825582568257825882598260826182628263826482658266826782688269827082718272827382748275827682778278827982808281828282838284828582868287828882898290829182928293829482958296829782988299830083018302830383048305830683078308830983108311831283138314831583168317831883198320832183228323832483258326832783288329833083318332833383348335833683378338833983408341834283438344834583468347834883498350835183528353835483558356835783588359836083618362836383648365836683678368836983708371837283738374837583768377837883798380838183828383838483858386838783888389839083918392839383948395839683978398839984008401840284038404840584068407840884098410841184128413841484158416841784188419842084218422842384248425842684278428842984308431843284338434843584368437843884398440844184428443844484458446844784488449845084518452845384548455845684578458845984608461846284638464846584668467846884698470847184728473847484758476847784788479848084818482848384848485848684878488848984908491849284938494849584968497849884998500850185028503850485058506850785088509851085118512851385148515851685178518851985208521852285238524852585268527852885298530853185328533853485358536853785388539854085418542854385448545854685478548854985508551855285538554855585568557855885598560856185628563856485658566856785688569857085718572857385748575857685778578857985808581858285838584858585868587858885898590859185928593859485958596859785988599860086018602860386048605860686078608860986108611861286138614861586168617861886198620862186228623862486258626862786288629863086318632863386348635863686378638863986408641864286438644864586468647864886498650865186528653865486558656865786588659866086618662866386648665866686678668866986708671867286738674867586768677867886798680868186828683868486858686868786888689869086918692869386948695869686978698869987008701870287038704870587068707870887098710871187128713871487158716871787188719872087218722872387248725872687278728872987308731873287338734873587368737873887398740874187428743874487458746874787488749875087518752875387548755875687578758875987608761876287638764876587668767876887698770877187728773877487758776877787788779878087818782878387848785878687878788878987908791879287938794879587968797879887998800880188028803880488058806880788088809881088118812881388148815881688178818881988208821882288238824882588268827882888298830883188328833883488358836883788388839884088418842884388448845884688478848884988508851885288538854885588568857885888598860886188628863886488658866886788688869887088718872887388748875887688778878887988808881888288838884888588868887888888898890889188928893889488958896889788988899890089018902890389048905890689078908890989108911891289138914891589168917891889198920892189228923892489258926892789288929893089318932893389348935893689378938893989408941894289438944894589468947894889498950895189528953895489558956895789588959896089618962896389648965896689678968896989708971897289738974897589768977897889798980898189828983898489858986898789888989899089918992899389948995899689978998899990009001900290039004900590069007900890099010901190129013901490159016901790189019902090219022902390249025902690279028902990309031903290339034903590369037903890399040904190429043904490459046904790489049905090519052905390549055905690579058905990609061906290639064906590669067906890699070907190729073907490759076907790789079908090819082908390849085908690879088908990909091909290939094909590969097909890999100910191029103910491059106910791089109911091119112911391149115911691179118911991209121912291239124912591269127912891299130913191329133913491359136913791389139914091419142914391449145914691479148914991509151915291539154915591569157915891599160916191629163916491659166916791689169917091719172917391749175917691779178917991809181918291839184918591869187918891899190919191929193919491959196919791989199920092019202920392049205920692079208920992109211921292139214921592169217921892199220922192229223922492259226922792289229923092319232923392349235923692379238923992409241924292439244924592469247924892499250925192529253925492559256925792589259926092619262926392649265926692679268926992709271927292739274927592769277927892799280928192829283928492859286928792889289929092919292929392949295929692979298929993009301930293039304930593069307930893099310931193129313931493159316931793189319932093219322932393249325932693279328932993309331933293339334933593369337933893399340934193429343934493459346934793489349935093519352935393549355935693579358935993609361936293639364936593669367936893699370937193729373937493759376937793789379938093819382938393849385938693879388938993909391939293939394939593969397939893999400940194029403940494059406940794089409941094119412941394149415941694179418941994209421942294239424942594269427942894299430943194329433943494359436943794389439944094419442944394449445944694479448944994509451945294539454945594569457945894599460946194629463946494659466946794689469947094719472947394749475947694779478947994809481948294839484948594869487948894899490949194929493949494959496949794989499950095019502950395049505950695079508950995109511951295139514951595169517951895199520952195229523952495259526952795289529953095319532953395349535953695379538953995409541954295439544954595469547954895499550955195529553955495559556955795589559956095619562956395649565956695679568956995709571957295739574957595769577957895799580958195829583958495859586958795889589959095919592959395949595959695979598959996009601960296039604960596069607960896099610961196129613961496159616961796189619962096219622962396249625962696279628962996309631963296339634963596369637963896399640964196429643964496459646964796489649965096519652965396549655965696579658965996609661966296639664966596669667966896699670967196729673967496759676967796789679968096819682968396849685968696879688968996909691969296939694969596969697969896999700970197029703970497059706970797089709971097119712971397149715971697179718971997209721972297239724972597269727972897299730973197329733973497359736973797389739974097419742974397449745974697479748974997509751975297539754975597569757975897599760976197629763976497659766976797689769977097719772977397749775977697779778977997809781978297839784978597869787978897899790979197929793979497959796979797989799980098019802980398049805980698079808980998109811981298139814981598169817981898199820982198229823982498259826982798289829983098319832983398349835983698379838983998409841984298439844984598469847984898499850985198529853985498559856985798589859986098619862986398649865986698679868986998709871987298739874987598769877987898799880988198829883988498859886988798889889989098919892989398949895989698979898989999009901990299039904990599069907990899099910991199129913991499159916991799189919992099219922992399249925992699279928992999309931993299339934993599369937993899399940994199429943994499459946994799489949995099519952995399549955995699579958995999609961996299639964996599669967996899699970997199729973997499759976997799789979998099819982998399849985998699879988998999909991999299939994999599969997999899991000010001100021000310004100051000610007100081000910010100111001210013100141001510016100171001810019100201002110022100231002410025100261002710028100291003010031100321003310034100351003610037100381003910040100411004210043100441004510046100471004810049100501005110052100531005410055100561005710058100591006010061100621006310064100651006610067100681006910070100711007210073100741007510076100771007810079100801008110082100831008410085100861008710088100891009010091100921009310094100951009610097100981009910100101011010210103101041010510106101071010810109101101011110112101131011410115101161011710118101191012010121101221012310124101251012610127101281012910130101311013210133101341013510136101371013810139101401014110142101431014410145101461014710148101491015010151101521015310154101551015610157101581015910160101611016210163101641016510166101671016810169101701017110172101731017410175101761017710178101791018010181101821018310184101851018610187101881018910190101911019210193101941019510196101971019810199102001020110202102031020410205102061020710208102091021010211102121021310214102151021610217102181021910220102211022210223102241022510226102271022810229102301023110232102331023410235102361023710238102391024010241102421024310244102451024610247102481024910250102511025210253102541025510256102571025810259102601026110262102631026410265102661026710268102691027010271102721027310274102751027610277102781027910280102811028210283102841028510286102871028810289102901029110292102931029410295102961029710298102991030010301103021030310304103051030610307103081030910310103111031210313103141031510316103171031810319103201032110322103231032410325103261032710328103291033010331103321033310334103351033610337103381033910340103411034210343103441034510346103471034810349103501035110352103531035410355103561035710358103591036010361103621036310364103651036610367103681036910370103711037210373103741037510376103771037810379103801038110382103831038410385103861038710388103891039010391103921039310394103951039610397103981039910400104011040210403104041040510406104071040810409104101041110412104131041410415104161041710418104191042010421104221042310424104251042610427104281042910430104311043210433104341043510436104371043810439104401044110442104431044410445104461044710448104491045010451104521045310454104551045610457104581045910460104611046210463104641046510466104671046810469104701047110472104731047410475104761047710478104791048010481104821048310484104851048610487104881048910490104911049210493104941049510496104971049810499105001050110502105031050410505105061050710508105091051010511105121051310514105151051610517105181051910520105211052210523105241052510526105271052810529105301053110532105331053410535105361053710538105391054010541105421054310544105451054610547105481054910550105511055210553105541055510556105571055810559105601056110562105631056410565105661056710568105691057010571105721057310574105751057610577105781057910580105811058210583105841058510586105871058810589105901059110592105931059410595105961059710598105991060010601106021060310604106051060610607106081060910610106111061210613106141061510616106171061810619106201062110622106231062410625106261062710628106291063010631106321063310634106351063610637106381063910640106411064210643106441064510646106471064810649106501065110652106531065410655106561065710658106591066010661106621066310664106651066610667106681066910670106711067210673106741067510676106771067810679106801068110682106831068410685106861068710688106891069010691106921069310694106951069610697106981069910700107011070210703107041070510706107071070810709107101071110712107131071410715107161071710718107191072010721107221072310724107251072610727107281072910730107311073210733107341073510736107371073810739107401074110742107431074410745107461074710748107491075010751107521075310754107551075610757107581075910760107611076210763107641076510766107671076810769107701077110772107731077410775107761077710778107791078010781107821078310784107851078610787107881078910790107911079210793107941079510796107971079810799108001080110802108031080410805108061080710808108091081010811108121081310814108151081610817108181081910820108211082210823108241082510826108271082810829108301083110832108331083410835108361083710838108391084010841108421084310844108451084610847108481084910850108511085210853108541085510856108571085810859108601086110862108631086410865108661086710868108691087010871108721087310874108751087610877108781087910880108811088210883108841088510886108871088810889108901089110892108931089410895108961089710898108991090010901109021090310904109051090610907109081090910910109111091210913109141091510916109171091810919109201092110922109231092410925109261092710928109291093010931109321093310934109351093610937109381093910940109411094210943109441094510946109471094810949109501095110952109531095410955109561095710958109591096010961109621096310964109651096610967109681096910970109711097210973109741097510976109771097810979109801098110982109831098410985109861098710988109891099010991109921099310994109951099610997109981099911000110011100211003110041100511006110071100811009110101101111012110131101411015110161101711018110191102011021110221102311024110251102611027110281102911030110311103211033110341103511036110371103811039110401104111042110431104411045110461104711048110491105011051110521105311054110551105611057110581105911060110611106211063110641106511066110671106811069110701107111072110731107411075110761107711078110791108011081110821108311084110851108611087110881108911090110911109211093110941109511096110971109811099111001110111102111031110411105111061110711108111091111011111111121111311114111151111611117111181111911120111211112211123111241112511126111271112811129111301113111132111331113411135111361113711138111391114011141111421114311144111451114611147111481114911150111511115211153111541115511156111571115811159111601116111162111631116411165111661116711168111691117011171111721117311174111751117611177111781117911180111811118211183111841118511186111871118811189111901119111192111931119411195111961119711198111991120011201112021120311204112051120611207112081120911210112111121211213112141121511216112171121811219112201122111222112231122411225112261122711228112291123011231112321123311234112351123611237112381123911240112411124211243112441124511246112471124811249112501125111252112531125411255112561125711258112591126011261112621126311264112651126611267112681126911270112711127211273112741127511276112771127811279112801128111282112831128411285112861128711288112891129011291112921129311294112951129611297112981129911300113011130211303113041130511306113071130811309113101131111312113131131411315113161131711318113191132011321113221132311324113251132611327113281132911330113311133211333113341133511336113371133811339113401134111342113431134411345113461134711348113491135011351113521135311354113551135611357113581135911360113611136211363113641136511366113671136811369113701137111372113731137411375113761137711378113791138011381113821138311384113851138611387113881138911390113911139211393113941139511396113971139811399114001140111402114031140411405114061140711408114091141011411114121141311414114151141611417114181141911420114211142211423114241142511426114271142811429114301143111432114331143411435114361143711438114391144011441114421144311444114451144611447114481144911450114511145211453114541145511456114571145811459114601146111462114631146411465114661146711468114691147011471114721147311474114751147611477114781147911480114811148211483114841148511486114871148811489114901149111492114931149411495114961149711498114991150011501115021150311504115051150611507115081150911510115111151211513115141151511516115171151811519115201152111522115231152411525115261152711528115291153011531115321153311534115351153611537115381153911540115411154211543115441154511546115471154811549115501155111552115531155411555115561155711558115591156011561115621156311564115651156611567115681156911570115711157211573115741157511576115771157811579115801158111582115831158411585115861158711588115891159011591115921159311594115951159611597115981159911600116011160211603116041160511606116071160811609116101161111612116131161411615116161161711618116191162011621116221162311624116251162611627116281162911630116311163211633116341163511636116371163811639116401164111642116431164411645116461164711648116491165011651116521165311654116551165611657116581165911660116611166211663116641166511666116671166811669116701167111672116731167411675116761167711678116791168011681116821168311684116851168611687116881168911690116911169211693116941169511696116971169811699117001170111702117031170411705117061170711708117091171011711117121171311714117151171611717117181171911720117211172211723117241172511726117271172811729117301173111732117331173411735117361173711738117391174011741117421174311744117451174611747117481174911750117511175211753117541175511756117571175811759117601176111762117631176411765117661176711768117691177011771117721177311774117751177611777117781177911780117811178211783117841178511786117871178811789117901179111792117931179411795117961179711798117991180011801118021180311804118051180611807118081180911810118111181211813118141181511816118171181811819118201182111822118231182411825118261182711828118291183011831118321183311834118351183611837118381183911840118411184211843118441184511846118471184811849118501185111852118531185411855118561185711858118591186011861118621186311864118651186611867118681186911870118711187211873118741187511876118771187811879118801188111882118831188411885118861188711888118891189011891118921189311894118951189611897118981189911900119011190211903119041190511906119071190811909119101191111912119131191411915119161191711918119191192011921119221192311924119251192611927119281192911930119311193211933119341193511936119371193811939119401194111942119431194411945119461194711948119491195011951119521195311954119551195611957119581195911960119611196211963119641196511966119671196811969119701197111972119731197411975119761197711978119791198011981119821198311984119851198611987119881198911990119911199211993119941199511996119971199811999120001200112002120031200412005120061200712008120091201012011120121201312014120151201612017120181201912020120211202212023120241202512026120271202812029120301203112032120331203412035120361203712038120391204012041120421204312044120451204612047120481204912050120511205212053120541205512056120571205812059120601206112062120631206412065120661206712068120691207012071120721207312074120751207612077120781207912080120811208212083120841208512086120871208812089120901209112092120931209412095120961209712098120991210012101121021210312104121051210612107121081210912110121111211212113121141211512116121171211812119121201212112122121231212412125121261212712128121291213012131121321213312134121351213612137121381213912140121411214212143121441214512146121471214812149121501215112152121531215412155121561215712158121591216012161121621216312164121651216612167121681216912170121711217212173121741217512176121771217812179121801218112182121831218412185121861218712188121891219012191121921219312194121951219612197121981219912200122011220212203122041220512206122071220812209122101221112212122131221412215122161221712218122191222012221122221222312224122251222612227122281222912230122311223212233122341223512236122371223812239122401224112242122431224412245122461224712248122491225012251122521225312254122551225612257122581225912260122611226212263122641226512266122671226812269122701227112272122731227412275122761227712278122791228012281122821228312284122851228612287122881228912290122911229212293122941229512296122971229812299123001230112302123031230412305123061230712308123091231012311123121231312314123151231612317123181231912320123211232212323123241232512326123271232812329123301233112332123331233412335123361233712338123391234012341123421234312344123451234612347123481234912350123511235212353123541235512356123571235812359123601236112362123631236412365123661236712368123691237012371123721237312374123751237612377123781237912380123811238212383123841238512386123871238812389123901239112392123931239412395123961239712398123991240012401124021240312404124051240612407124081240912410124111241212413124141241512416124171241812419124201242112422124231242412425124261242712428124291243012431124321243312434124351243612437124381243912440124411244212443124441244512446124471244812449124501245112452124531245412455124561245712458124591246012461124621246312464124651246612467124681246912470124711247212473124741247512476124771247812479124801248112482124831248412485124861248712488124891249012491124921249312494124951249612497124981249912500125011250212503125041250512506125071250812509125101251112512125131251412515125161251712518125191252012521125221252312524125251252612527125281252912530125311253212533125341253512536125371253812539125401254112542125431254412545125461254712548125491255012551125521255312554125551255612557125581255912560125611256212563125641256512566125671256812569125701257112572125731257412575125761257712578125791258012581125821258312584125851258612587125881258912590125911259212593125941259512596125971259812599126001260112602126031260412605126061260712608126091261012611126121261312614126151261612617126181261912620126211262212623126241262512626126271262812629126301263112632126331263412635126361263712638126391264012641126421264312644126451264612647126481264912650126511265212653126541265512656126571265812659126601266112662126631266412665126661266712668126691267012671126721267312674126751267612677126781267912680126811268212683126841268512686126871268812689126901269112692126931269412695126961269712698126991270012701127021270312704127051270612707127081270912710127111271212713127141271512716127171271812719127201272112722127231272412725127261272712728127291273012731127321273312734127351273612737127381273912740127411274212743127441274512746127471274812749127501275112752127531275412755127561275712758127591276012761127621276312764127651276612767127681276912770127711277212773127741277512776127771277812779127801278112782127831278412785127861278712788127891279012791127921279312794127951279612797127981279912800128011280212803128041280512806128071280812809128101281112812128131281412815128161281712818128191282012821128221282312824128251282612827128281282912830128311283212833128341283512836128371283812839128401284112842128431284412845128461284712848128491285012851128521285312854128551285612857128581285912860128611286212863128641286512866128671286812869128701287112872128731287412875128761287712878128791288012881128821288312884128851288612887128881288912890128911289212893128941289512896128971289812899129001290112902129031290412905129061290712908129091291012911129121291312914129151291612917129181291912920129211292212923129241292512926129271292812929129301293112932129331293412935129361293712938129391294012941129421294312944129451294612947129481294912950129511295212953129541295512956129571295812959129601296112962129631296412965129661296712968129691297012971129721297312974129751297612977129781297912980129811298212983129841298512986129871298812989129901299112992129931299412995129961299712998129991300013001130021300313004130051300613007130081300913010130111301213013130141301513016130171301813019130201302113022130231302413025130261302713028130291303013031130321303313034130351303613037130381303913040130411304213043130441304513046130471304813049130501305113052130531305413055130561305713058130591306013061130621306313064130651306613067130681306913070130711307213073130741307513076130771307813079130801308113082130831308413085130861308713088130891309013091130921309313094130951309613097130981309913100131011310213103131041310513106131071310813109131101311113112131131311413115131161311713118131191312013121131221312313124131251312613127131281312913130131311313213133131341313513136131371313813139131401314113142131431314413145131461314713148131491315013151131521315313154131551315613157131581315913160131611316213163131641316513166131671316813169131701317113172131731317413175131761317713178131791318013181131821318313184131851318613187131881318913190131911319213193131941319513196131971319813199132001320113202132031320413205132061320713208132091321013211132121321313214132151321613217132181321913220132211322213223132241322513226132271322813229132301323113232132331323413235132361323713238132391324013241132421324313244132451324613247132481324913250132511325213253132541325513256132571325813259132601326113262132631326413265132661326713268132691327013271132721327313274132751327613277132781327913280132811328213283132841328513286132871328813289132901329113292132931329413295132961329713298132991330013301133021330313304133051330613307133081330913310133111331213313133141331513316133171331813319133201332113322133231332413325133261332713328133291333013331133321333313334133351333613337133381333913340133411334213343133441334513346133471334813349133501335113352133531335413355133561335713358133591336013361133621336313364133651336613367133681336913370133711337213373133741337513376133771337813379133801338113382133831338413385133861338713388133891339013391133921339313394133951339613397133981339913400134011340213403134041340513406134071340813409134101341113412134131341413415134161341713418134191342013421134221342313424134251342613427134281342913430134311343213433134341343513436134371343813439134401344113442134431344413445134461344713448134491345013451134521345313454134551345613457134581345913460134611346213463134641346513466134671346813469134701347113472134731347413475134761347713478134791348013481134821348313484134851348613487134881348913490134911349213493134941349513496134971349813499135001350113502135031350413505135061350713508135091351013511135121351313514135151351613517135181351913520135211352213523135241352513526135271352813529135301353113532135331353413535135361353713538135391354013541135421354313544135451354613547135481354913550135511355213553135541355513556135571355813559135601356113562135631356413565135661356713568135691357013571135721357313574135751357613577135781357913580135811358213583135841358513586135871358813589135901359113592135931359413595135961359713598135991360013601136021360313604136051360613607136081360913610136111361213613136141361513616136171361813619136201362113622136231362413625136261362713628136291363013631136321363313634136351363613637136381363913640136411364213643136441364513646136471364813649136501365113652136531365413655136561365713658136591366013661136621366313664136651366613667136681366913670136711367213673136741367513676136771367813679136801368113682136831368413685136861368713688136891369013691136921369313694136951369613697136981369913700137011370213703137041370513706137071370813709137101371113712137131371413715137161371713718137191372013721137221372313724137251372613727137281372913730137311373213733137341373513736137371373813739137401374113742137431374413745137461374713748137491375013751137521375313754137551375613757137581375913760137611376213763137641376513766137671376813769137701377113772137731377413775137761377713778137791378013781137821378313784137851378613787137881378913790137911379213793137941379513796137971379813799138001380113802138031380413805138061380713808138091381013811138121381313814138151381613817138181381913820138211382213823138241382513826138271382813829138301383113832138331383413835138361383713838138391384013841138421384313844138451384613847138481384913850138511385213853138541385513856138571385813859138601386113862138631386413865138661386713868138691387013871138721387313874138751387613877138781387913880138811388213883138841388513886138871388813889138901389113892138931389413895138961389713898138991390013901139021390313904139051390613907139081390913910139111391213913139141391513916139171391813919139201392113922139231392413925139261392713928139291393013931139321393313934139351393613937139381393913940139411394213943139441394513946139471394813949139501395113952139531395413955139561395713958139591396013961139621396313964139651396613967139681396913970139711397213973139741397513976139771397813979139801398113982139831398413985139861398713988139891399013991139921399313994139951399613997139981399914000140011400214003140041400514006140071400814009140101401114012140131401414015140161401714018140191402014021140221402314024140251402614027
  1. <template>
  2. <div class="pb_content" style="background: #F0F2F5;">
  3. <div class="pb_content_body" style="position: relative; margin: 0">
  4. <div class="right">
  5. <div class="courseTop">
  6. <div class="stepsNav">
  7. <el-breadcrumb separator-class="el-icon-arrow-right">
  8. <el-breadcrumb-item :to="{
  9. path:
  10. '/course?userid=' +
  11. userid +
  12. '&oid=' +
  13. oid +
  14. '&org=' +
  15. org +
  16. '&role=' +
  17. role,
  18. }">课程管理</el-breadcrumb-item>
  19. <el-breadcrumb-item>
  20. <span style="color: rgb(15, 126, 255)">添加课程</span>
  21. </el-breadcrumb-item>
  22. </el-breadcrumb>
  23. </div>
  24. <div class="r_pub_button_retrun" @click="retrunCourse">返回</div>
  25. </div>
  26. <!-- <div style="display: flex; margin-top: 20px; position: relative"> -->
  27. <div ref="stepBox" class="stepBox">
  28. <div class="stepBg" v-if="false">
  29. <div :class="{ stepTop: isStepDisplay, stepTop2: !isStepDisplay }" @mouseenter="stepDisplay(true)"
  30. @mouseleave="stepDisplay(false)">
  31. <div v-if="steps > 0 && isStepDisplay" class="first" @click="navSteps(1)">
  32. <div>
  33. <img src="../../assets/icon/first.png" alt />
  34. </div>
  35. <div>填写基本信息</div>
  36. </div>
  37. <div v-else-if="isStepDisplay" class="firstNo" @click="navSteps(1)">
  38. <div>
  39. <img src="../../assets/icon/firstNo.png" alt />
  40. </div>
  41. <div>填写基本信息</div>
  42. </div>
  43. <div class="stepBorder" :class="{ 'border-active': steps > 1 }" v-if="cidType === 0 && isStepDisplay"></div>
  44. <div v-if="steps > 1 && cidType === 0 && isStepDisplay" class="second" @click="navSteps(2)">
  45. <div style="margin: 5px 10px 0 0; width: 2rem">
  46. <img src="../../assets/icon/second.png" alt />
  47. </div>
  48. <div>选择课程模板</div>
  49. </div>
  50. <div v-else-if="cidType === 0 && isStepDisplay" class="secondNo" @click="navSteps(2)">
  51. <div>
  52. <img src="../../assets/icon/secondNo.png" alt />
  53. </div>
  54. <div>选择课程模板</div>
  55. </div>
  56. <div v-if="isStepDisplay" class="stepBorder" :class="{ 'border-active': steps > 2 }"></div>
  57. <div v-if="steps > 2 && isStepDisplay" class="third" @click="navSteps(3)">
  58. <div>
  59. <img src="../../assets/icon/third.png" alt />
  60. </div>
  61. <div>上传课程内容</div>
  62. </div>
  63. <div v-else-if="isStepDisplay" class="thirdNo" @click="navSteps(3)">
  64. <div>
  65. <img src="../../assets/icon/thirdNo.png" alt />
  66. </div>
  67. <div>上传课程内容</div>
  68. </div>
  69. <div v-if="isStepDisplay" class="stepBorder" :class="{ 'border-active': steps > 3 }"></div>
  70. <div v-if="steps > 3 && isStepDisplay" class="four">
  71. <div>
  72. <img src="../../assets/icon/four.png" alt />
  73. </div>
  74. <div>上传完成</div>
  75. </div>
  76. <div v-else-if="isStepDisplay" class="fourNo">
  77. <div>
  78. <img src="../../assets/icon/fourNo.png" alt />
  79. </div>
  80. <div>上传完成</div>
  81. </div>
  82. </div>
  83. </div>
  84. <div class="rightBox" v-if="this.steps == 1" @mousewheel="scrollChange" style="padding:0;"
  85. :style="{ height: (!isStepDisplay && !isBtnDisplay) ? 'calc(100% - 20px)' : 'calc(100% - 100px)' }">
  86. <div class="updateMask" :style="{
  87. height: rightBoxHeight ? rightBoxHeight + 'px' : '100%',
  88. }" v-if="cid && userid != courseUserid && role != '1'"></div>
  89. <div class="whiteBg" style="background:unset;padding: 0;">
  90. <div>
  91. <div class="basic_box" style="padding: 0;">
  92. <div class="big_box">
  93. <div class="left_first">
  94. <div :class="{
  95. updateTips: cid && userid != courseUserid && role != '1',
  96. }">
  97. <div style="width: 100%;">
  98. <div class="course_input_box">
  99. <div class="bb_courseIcon"><img src="../../assets/icon/new/course.png" /></div>
  100. <input type="text" placeholder="请输入课程名称" class="binfo_input" v-model="courseName"
  101. style="border: 1.5px solid rgb(202, 209, 220);margin: 0px 10px 0px 0px;border-radius: 5px;font-weight: 600;padding: 12px 14px 12px 71px;" />
  102. <el-switch v-model="isTeacherSee" active-text="是否公开此课程"
  103. style="justify-content: center;width: 200px;"></el-switch>
  104. </div>
  105. </div>
  106. </div>
  107. <div class="pType_box all_choose" v-if="oid == '69893dca-1d47-11ed-8c78-005056b86db5'">
  108. <span>类型</span>
  109. <!-- 学科+ 主题+ 未来+ -->
  110. <el-radio-group @change="CourseType2Change" v-model="pTypeCheckName"
  111. style="display: flex; align-items: center">
  112. <div class="all_choose" style="width: 100px" v-for="(item, index) in CourseType2" :key="index">
  113. <el-radio :label="item.name">{{
  114. item.name
  115. }}</el-radio>
  116. </div>
  117. </el-radio-group>
  118. </div>
  119. <div class="both">
  120. <div class="choose">
  121. <div class="all_choose" v-for="(item, index) in CourseType[0]" :key="index">
  122. <span v-if="CourseTypeJson[item.id].length > 0 &&
  123. (oid == '69893dca-1d47-11ed-8c78-005056b86db5'
  124. ? pTypeCheck.indexOf(item.id) != -1
  125. : true)
  126. ">{{ item.name }}:</span>
  127. <el-checkbox-group v-model="courseTypeId" v-if="CourseTypeJson[item.id].length > 0 &&
  128. (oid == '69893dca-1d47-11ed-8c78-005056b86db5'
  129. ? pTypeCheck.indexOf(item.id) != -1
  130. : true)
  131. ">
  132. <el-checkbox v-for="item1 in CourseTypeJson[item.id]" :key="item1.id" :label="item1.id">{{
  133. item1.name }}</el-checkbox>
  134. </el-checkbox-group>
  135. <!-- <div
  136. v-else
  137. style="font-size: 14px; margin-left: -8px"
  138. >
  139. 暂无
  140. </div> -->
  141. </div>
  142. </div>
  143. </div>
  144. </div>
  145. <div class="right_first">
  146. <!-- <div class="ai_box">
  147. <div class="ai_content" @click="openAI"><img src="../../assets/icon/new/ai.png"/><span>AI共创</span></div>
  148. </div> -->
  149. <div class="c_info_title" style="padding: 0 0 15px;margin: 0 auto 0 0;">上传封面</div>
  150. <div style="width: 100%;">
  151. <div class="uploadFm" @click="choosePicVisible = true" :class="{uploadFm2:cover.length}">
  152. <img src="../../assets/icon/addPoster.png" alt="" v-if="cover.length == 0"/>
  153. <img :src="cover[0].url" alt="" class="cover_p" v-else/>
  154. <div v-if="cover.length == 0">点击添加封面</div>
  155. <div class="cover_mask"><img src="../../assets/icon/new/cover_update.png" /><span style="margin-top:5px;">修改封面</span></div>
  156. </div>
  157. <!-- <el-upload :class="{ disUoloadSty: noneBtnImg }" class="upCss" action="#" list-type="picture"
  158. v-loading="uploadLoading1" :http-request="beforeUpload1" ref="upload1"
  159. :on-preview="handlePictureCardPreview" :on-remove="handle_remove1" :show-file-list="true"
  160. :file-list="cover" accept="image/*" :limit="1" :on-exceed="onExceed" v-else>
  161. <i class="el-icon-plus"></i>
  162. </el-upload> -->
  163. </div>
  164. </div>
  165. </div>
  166. </div>
  167. </div>
  168. </div>
  169. <div class="whiteBg" style="background:#fff;margin: 10px 0;">
  170. <div class="whiteBg" style="border-radius: 0">
  171. <div class="c_info_title">课程权限设置</div>
  172. <div class="wb_j_box">
  173. <div class="wb_j_box_content">
  174. <!-- <button class="c_pub_button_add pub_btn_add_img" @click="
  175. (dialogVisibleClass = true),
  176. (classSearch = ''),
  177. (gradeId = ''),
  178. getClass()
  179. ">添加班级</button>
  180. <div v-if="checkboxList2.length" class="wb_j_box_p_box">
  181. <span :class="{ tcMember: getClassC(tc) }" v-for="(tc, tcIndex) in checkboxList2" :key="tcIndex">{{
  182. getClassC(tc) }}</span>
  183. </div> -->
  184. <div class="wb_j_box_btn" @click="
  185. (dialogVisibleClass = true),
  186. (classSearch = ''),
  187. (gradeId = ''),
  188. getClass()
  189. ">
  190. <div class="wb_j_box_title">授课班级</div>
  191. <div class="wb_j_box_btn_c">
  192. <el-tooltip effect="dark" :content="getListClassC(checkboxList2)" placement="top"
  193. v-if="checkboxList2.length" popper-class="text_tooltip2">
  194. <div class="wb_j_box_span">{{ getListClassC(checkboxList2) }}</div>
  195. </el-tooltip>
  196. <div v-else class="wb_j_box_span">请选择授课班级</div>
  197. <div class="wb_j_box_arrow"></div>
  198. </div>
  199. </div>
  200. </div>
  201. <div class="wb_j_box_content">
  202. <!-- <button class="c_pub_button_add pub_btn_add_img" @click="openMember">添加协同成员</button>
  203. <div v-if="checkboxList3.length" class="wb_j_box_p_box" @click="checkBoolean = !checkBoolean">
  204. <span :class="{ tcMember: getMan2(tc) }" v-for="(tc, tcIndex) in checkboxList3.length > 6 &&
  205. checkBoolean
  206. ? checkboxList3
  207. : checkboxList3.slice(0, 6)" :key="tcIndex">{{ getMan2(tc) }}</span><span class="tcMember"
  208. v-if="checkboxList3.length > 6 && !checkBoolean">更多...</span>
  209. </div> -->
  210. <div class="wb_j_box_btn" @click="openMember">
  211. <div class="wb_j_box_title">协同人员</div>
  212. <div class="wb_j_box_btn_c">
  213. <el-tooltip effect="dark" :content="getListMan2(checkboxList3)" placement="top"
  214. v-if="checkboxList3.length" popper-class="text_tooltip2">
  215. <div class="wb_j_box_span">{{ getListMan2(checkboxList3) }}</div>
  216. </el-tooltip>
  217. <div v-else class="wb_j_box_span">请选择协同人员</div>
  218. <div class="wb_j_box_arrow"></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="c_info_title">课程简要描述</div>
  226. <div style="width: 100%;padding: 0px 20px;box-sizing: border-box;">
  227. <div style="width: calc((100% - 55% - 100px) * 2 - 30px)">
  228. <textarea v-autoHeight="68" rows="2" class="binfo_input binfo_textarea" cols v-model="courseText" placeholder="请输入课程简要描述"></textarea>
  229. </div>
  230. </div>
  231. </div>
  232. <div class="whiteBg" style="border-radius: 0; margin-top: 15px; padding-bottom: 20px">
  233. <div class="c_info_title">目标管理</div>
  234. <div style="margin: 0 auto;padding:0 20px">
  235. <div style="
  236. width: 95%;
  237. min-height: 200px;
  238. border: 1px solid #CAD1DC;
  239. border-radius: 4px;
  240. position: relative;
  241. ">
  242. <div class="e_add_top">
  243. <div class="e_add_title">
  244. <button class="c_pub_button_delete pub_btn_delete_img" @click="deleteEva()"
  245. v-if="evalua">清除</button>
  246. <button class="c_pub_button_confirm pub_btn_add_img2" @click="dialogVisiblemb = true">添加</button>
  247. <!-- <span>当前使用目标管理</span>
  248. <span>{{ eTitle ? eTitle : "请添加目标" }}</span>
  249. <img
  250. src="../../assets/line.png"
  251. class="cru_line"
  252. style="
  253. width: 125px;
  254. height: 20px;
  255. bottom: -10px;
  256. left: 155px;
  257. "
  258. /> -->
  259. </div>
  260. <div style="
  261. display: flex;
  262. flex-direction: row;
  263. align-items: center;
  264. ">
  265. <!-- <el-button
  266. type="primary"
  267. size="small"
  268. @click="dialogVisiblemb = true"
  269. >添加目标管理</el-button
  270. >
  271. <el-button
  272. type="primary"
  273. size="small"
  274. @click="deleteEva()"
  275. >清除内容</el-button
  276. > -->
  277. <!-- <div class="e_add_delete" @click="deleteEva()">
  278. <img src="../../assets/icon/delete.png" alt="" />
  279. </div> -->
  280. </div>
  281. </div>
  282. <div v-if="evalua == ''">
  283. <div class="noneBox">
  284. <img src="../../assets/icon/new/eva_none.png" />
  285. <span>请添加目标管理</span>
  286. </div>
  287. </div>
  288. <div class="e_add_content" v-else>
  289. <div class="e_add_list_pbox">
  290. <div class="e_add_list_pbox_title">
  291. <span class="type_title">切换模式</span>
  292. <div class="type_content">
  293. <span :class="{ active: typeMode == 1 }" @click="OtherMb(1)">目标树</span>
  294. <span :class="{ active: typeMode == 2 }" @click="OtherMb(2)">目标罗盘</span>
  295. <!-- <span :class="{ active: typeMode == 3 }" @click="OtherMb(3)">目标看板</span> -->
  296. </div>
  297. </div>
  298. <div class="e_add_list_pbox_content">
  299. <Mind :showBar="false" :mindData="data" v-show="typeMode == 1"></Mind>
  300. <Sunburst :Josn="eJson" :num="eJSONNum" style="width: 100%" v-if="typeMode == 2"></Sunburst>
  301. <SeeBoard :Josn="eJson" :num="eJSONNum" :ename="eTitle" style="width: 100%"
  302. v-if="typeMode == 3">
  303. </SeeBoard>
  304. </div>
  305. </div>
  306. </div>
  307. </div>
  308. </div>
  309. </div>
  310. </div>
  311. <div class="info_btnBox3">
  312. <button class="c_pub_button_return pub_btn_return_img" v-if="steps == 1" @click="
  313. goTo(
  314. '/course?userid=' +
  315. userid +
  316. '&oid=' +
  317. oid +
  318. '&org=' +
  319. org +
  320. '&role=' +
  321. role
  322. )
  323. ">
  324. 返回课程
  325. </button>
  326. <button class="c_pub_button_return pub_btn_last_img" v-if="steps > 1 && steps != 5" @click="lastSteps">
  327. {{ steps == 4 ? "返回课程" : "上一步" }}
  328. </button>
  329. <button class="c_pub_button_confirm" v-if="steps < 4" @click="nextSteps"
  330. :class="{ pub_btn_next_img: steps != 3, pub_btn_finish_img: steps == 3 }">
  331. {{ steps == 3 ? "确认上传" : "下一步" }}
  332. </button>
  333. </div>
  334. </div>
  335. <div class="rightBox" v-if="this.steps == 2"
  336. :style="{ height: (!isStepDisplay && !isBtnDisplay) ? 'calc(100% - 40px)' : 'calc(100% - 100px)' }">
  337. <div class="basic_box"
  338. style="padding: 20px 30px 0px !important; box-sizing: border-box;height: calc(100% - 80px);overflow: auto;background:#fff">
  339. <!-- <div
  340. style="
  341. color: #b8b8b8;
  342. background: #fff;
  343. width: 26%;
  344. height: 40px;
  345. border-radius: 15px;
  346. padding-left: 20px;
  347. line-height: 40px;
  348. font-size: 17px;
  349. box-shadow: 0px 1px 2px 2px #e0e0e0;
  350. "
  351. >-->
  352. <div class="right_title" style="border: none; margin: 0; padding: 0">
  353. 请选择合适的课程模板
  354. </div>
  355. <div class="wordbox">
  356. <div class="wordTeacher" @click="checkTemplate2()">
  357. <div class="wordPic">
  358. <img src="../../assets/icon/new/template_none.png" alt />
  359. </div>
  360. <div style="
  361. margin-top: 10px;
  362. line-height: 19px;
  363. overflow: hidden;
  364. text-overflow: ellipsis;
  365. white-space: nowrap;
  366. padding: 0 20px;
  367. ">
  368. 空白模板
  369. </div>
  370. </div>
  371. <div class="wordTeacher" v-for="(aa, indexF) in templateArray" :key="indexF" @click="checkTemplate(aa)">
  372. <div class="wordPic">
  373. <img src="../../assets/icon/new/template.png" alt />
  374. </div>
  375. <div style="
  376. margin-top: 10px;
  377. line-height: 19px;
  378. overflow: hidden;
  379. text-overflow: ellipsis;
  380. white-space: nowrap;
  381. padding: 0 20px;
  382. ">
  383. {{ aa.title }}
  384. </div>
  385. </div>
  386. <div class="wordTeacher" @click="checkTemplate3()" v-if="oid == '69893dca-1d47-11ed-8c78-005056b86db5'">
  387. <div class="wordPic">
  388. <img src="../../assets/icon/new/template.png" alt />
  389. </div>
  390. <div style="
  391. margin-top: 10px;
  392. line-height: 19px;
  393. overflow: hidden;
  394. text-overflow: ellipsis;
  395. white-space: nowrap;
  396. padding: 0 20px;
  397. ">
  398. 简易模板
  399. </div>
  400. </div>
  401. <div class="wordTeacher" @click="pasteStage()" v-if="isPasteStage">
  402. <div class="wordPic">
  403. <img src="../../assets/icon/new/template.png" alt />
  404. </div>
  405. <div style="
  406. margin-top: 10px;
  407. line-height: 19px;
  408. overflow: hidden;
  409. text-overflow: ellipsis;
  410. white-space: nowrap;
  411. padding: 0 20px;
  412. ">
  413. 智能粘贴模式
  414. </div>
  415. </div>
  416. <!-- <div class="wordTeacher" @click="checkTemplate4()">
  417. <div class="wordPic">
  418. <img src="../../assets/icon/wordMub.png" alt />
  419. </div>
  420. <div style="
  421. margin-top: 10px;
  422. line-height: 19px;
  423. overflow: hidden;
  424. text-overflow: ellipsis;
  425. white-space: nowrap;
  426. padding: 0 20px;
  427. ">
  428. 未来小学课程设计
  429. </div>
  430. </div> -->
  431. <!-- <div class="wordTeacher" @click="checkTemplate1()">
  432. <div class="wordPic">
  433. <img src="../../assets/icon/wordMub.png" alt />
  434. </div>
  435. <div style="
  436. margin-top: 10px;
  437. line-height: 19px;
  438. overflow: hidden;
  439. text-overflow: ellipsis;
  440. white-space: nowrap;
  441. padding: 0 20px;
  442. ">
  443. 我的课程
  444. </div>
  445. </div> -->
  446. </div>
  447. </div>
  448. <div class="info_btnBox3" style="position: absolute;bottom: 0;">
  449. <button class="c_pub_button_return pub_btn_return_img" v-if="steps == 1" @click="
  450. goTo(
  451. '/course?userid=' +
  452. userid +
  453. '&oid=' +
  454. oid +
  455. '&org=' +
  456. org +
  457. '&role=' +
  458. role
  459. )
  460. ">
  461. 返回课程
  462. </button>
  463. <button class="c_pub_button_return pub_btn_last_img" v-if="steps > 1 && steps != 5" @click="lastSteps">
  464. {{ steps == 4 ? "返回课程" : "上一步" }}
  465. </button>
  466. <button class="c_pub_button_confirm" v-if="steps < 4" @click="nextSteps"
  467. :class="{ pub_btn_next_img: steps != 3, pub_btn_finish_img: steps == 3 }">
  468. {{ steps == 3 ? "确认上传" : "下一步" }}
  469. </button>
  470. </div>
  471. </div>
  472. <div class="rightBox" v-if="this.steps == 3" ref="rightboxR"
  473. :style="{ height: (!isStepDisplay && !isBtnDisplay) ? 'calc(100% - 40px)' : 'calc(100% - 100px)' }">
  474. <div class="rb_c_box">
  475. <div class="rb_c_box_left" v-if="steps == 3 && unitJson[unitIndex].easy != 1">
  476. <div class="stepsBottom">
  477. <!-- <div class="navTop">辅助导航</div> -->
  478. <div class="navBottom" v-if="courseState == 2">
  479. <!-- <div class="navTask noImage" v-if="unitJson[unitIndex].dyName">
  480. <div class="nt_taskBox" style="width: 100%;">
  481. <div class="nt_taskTitle"
  482. style="font-size: 16px;min-width: fit-content;margin-right: 10px;font-weight: 700;">阶段 {{
  483. unitIndex + 1 }}</div>
  484. <div class="nt_taskName" style="font-size: 16px;font-weight: 700;">
  485. <el-tooltip effect="light" :content="unitJson[unitIndex].dyName" placement="top">
  486. <span>{{ unitJson[unitIndex].dyName }}</span>
  487. </el-tooltip>
  488. </div>
  489. </div>
  490. </div> -->
  491. <div v-for="(t, tIndex) in unitJson[unitIndex].chapterInfo[0]
  492. .taskJson" :key="tIndex" :class="{
  493. dragOverTop: newIndex === tIndex && typeIndex == 'task-'+tIndex && oldIndex > tIndex && dragType == 'task',
  494. dragOverBottom: newIndex === tIndex && typeIndex == 'task-'+tIndex && oldIndex < tIndex && dragType == 'task',
  495. }">
  496. <div @dragstart="dragTaskStart(t, tIndex, 0)" @dragover.prevent="dragTaskOver(tIndex, 0)"
  497. @dragend="dragTaskEnd()" draggable @click="goToTask(tIndex)" class="navTask" :class="{
  498. isNavTask:
  499. isClickColor > 0 && isClickColor == tIndex + 1,
  500. isNavOpen: t.toolOpen
  501. }">
  502. <div
  503. style="left: 8px;"
  504. class="chapter_upload_drag"
  505. ></div>
  506. <div class="nt_taskBox">
  507. <div class="nt_taskTitle">任务{{ tIndex + 1 }}</div>
  508. <div class="nt_taskName">
  509. <el-tooltip effect="light" :content="t.task ? t.task : '未命名任务'" placement="top">
  510. <span>{{ t.task ? t.task : '未命名任务' }}</span>
  511. </el-tooltip>
  512. </div>
  513. </div>
  514. <!-- <div class="moveBtn" v-if="unitJson[unitIndex].chapterInfo[0].taskJson.length >
  515. 1
  516. ">
  517. <div class="chapter_upload_up" style="margin: 0 5px 0 0;width: 25px;height: 25px;"
  518. @click.stop="taskMove(1, tIndex)"></div>
  519. <div class="chapter_upload_down" style="width: 25px;height: 25px;"
  520. @click.stop="taskMove(2, tIndex)"></div>
  521. </div> -->
  522. </div>
  523. <div class="gjBox" v-if="t.toolChoose.length && t.toolOpen">
  524. <div v-for="(tool, toolIndex2) in t.toolChoose" :key="toolIndex2"
  525. @click="jumpGj(tIndex, toolIndex2)">
  526. <div class="gjCss" :class="{ isGjCss: toolIndexType == `gj${tIndex}${toolIndex2}` }">
  527. <div>工具{{ toolIndex2 + 1 }}</div>
  528. <div>{{ toolsData[tool.tool[0]] && toolsData[tool.tool[0]].name }}</div>
  529. </div>
  530. </div>
  531. </div>
  532. </div>
  533. </div>
  534. <div class="navBottom" v-if="courseState == 1">
  535. <div v-for="(stage, stageIndex) in unitJson" :key="stageIndex" class="stageBox" :class="{
  536. dragOverTop: newIndex === stageIndex && typeIndex == 'Unit-'+stageIndex && oldIndex > stageIndex && dragType == 'Unit',
  537. dragOverBottom: newIndex === stageIndex && typeIndex == 'Unit-'+stageIndex && oldIndex < stageIndex && dragType == 'Unit',
  538. }">
  539. <div @dragstart="dragUnitStart(stage, stageIndex)" @dragover.prevent="dragUnitOver(stageIndex)"
  540. @dragend="dragUnitEnd()" draggable @click="unitSet2(stageIndex)" class="navStage" :class="{
  541. isNavStage: stageIndex == unitIndex,
  542. isNavStageOpen: stage.toolOpen
  543. }">
  544. <div
  545. style="left: 8px;"
  546. class="chapter_upload_drag"
  547. ></div>
  548. <div class="nt_taskBox">
  549. <div class="nt_taskTitle">{{ stageIndex + 1 }}阶段:</div>
  550. <div class="nt_taskName">
  551. <el-tooltip effect="light" :content="stage.dyName ? stage.dyName : '未命名阶段'" placement="top">
  552. <span>{{ stage.dyName ? stage.dyName : '未命名阶段' }}</span>
  553. </el-tooltip>
  554. </div>
  555. </div>
  556. </div>
  557. <div v-for="(t, tIndex) in unitJson[stageIndex].chapterInfo[0]
  558. .taskJson" :key="`${stageIndex}-${tIndex}`" :class="{
  559. dragOverTop: newIndex === tIndex && typeIndex == 'task-'+tIndex && ((oldIndex > tIndex && stageIndex == checkUnitIndex) || (oldIndex == tIndex && stageIndex == checkUnitIndex && checkUnitIndex != oldUnitIndex)) && dragType == 'task',
  560. dragOverBottom: newIndex === tIndex && typeIndex == 'task-'+tIndex && oldIndex < tIndex && stageIndex == checkUnitIndex && dragType == 'task',
  561. }" :style="{display:stage.toolOpen ? 'block' : 'none'}">
  562. <div @dragstart="dragTaskStart(t, tIndex, stageIndex)" @dragover.prevent="dragTaskOver(tIndex, stageIndex)"
  563. @dragend="dragTaskEnd()" draggable @click="goToTask2(tIndex, stageIndex)" class="navTask" :class="{
  564. isNavTask:
  565. isClickColor > 0 && isClickColor == tIndex + 1 && stageIndex == unitIndex,
  566. isNavOpen: t.toolOpen
  567. }">
  568. <div
  569. style="left: 12px;"
  570. class="chapter_upload_drag"
  571. ></div>
  572. <div class="nt_taskBox">
  573. <div class="nt_taskTitle">任务{{ tIndex + 1 }}</div>
  574. <div class="nt_taskName">
  575. <el-tooltip effect="light" :content="t.task ? t.task : '未命名任务'" placement="top">
  576. <span>{{ t.task ? t.task : '未命名任务' }}</span>
  577. </el-tooltip>
  578. </div>
  579. </div>
  580. </div>
  581. <div class="gjBox" v-if="t.toolChoose.length && t.toolOpen">
  582. <div v-for="(tool, toolIndex2) in t.toolChoose" :key="toolIndex2"
  583. @click="jumpGj2(tIndex, toolIndex2, stageIndex)">
  584. <div class="gjCss" :class="{ isGjCss: toolIndexType == `gj${tIndex}${toolIndex2}${stageIndex}` }">
  585. <div>工具{{ toolIndex2 + 1 }}</div>
  586. <div>{{ toolsData[tool.tool[0]] && toolsData[tool.tool[0]].name }}</div>
  587. </div>
  588. </div>
  589. </div>
  590. </div>
  591. </div>
  592. </div>
  593. </div>
  594. </div>
  595. <div class="rb_c_box_right">
  596. <!-- <div class="rb_c_box_btn">
  597. <button class="c_pub_button_add pub_btn_paste_img" @click="pasteTask" v-if="steps == 3">智能粘贴</button>
  598. </div> -->
  599. <div class="basic_box" ref="unitBox">
  600. <div style="
  601. display: flex;
  602. flex-direction: row;
  603. align-items: center;
  604. position: sticky;
  605. top: 0;
  606. z-index: 99;
  607. width: 100%;
  608. padding: 0 20px 0 20px;
  609. box-sizing: border-box;
  610. background: #fff;
  611. border-radius: 8px;
  612. ">
  613. <!-- :style="{ maxWidth: (userid == courseUserid || role == '1') ? 'calc(100% - 300px)' : 'calc(100% - 175px)' }" -->
  614. <div class="cru_selectBox"
  615. :style="{ maxWidth: isPasteTask ? 'calc(100% - 335px)' : 'calc(100% - 190px)' }" v-if="courseState == 1">
  616. <div v-for="(item, index) in unitJson" :key="index" class="cru_select"
  617. :class="unitIndex == index ? 'cru_selected' : ''" @click="unitSet(index)">
  618. <!-- item.dyName ? item.dyName : -->
  619. <span v-if="unitJson[unitJson.length - 1].easy == 4 ||
  620. unitJson[unitJson.length - 1].easy == 6
  621. ">{{
  622. item.dyName ? item.dyName : "第" + (index + 1) + "阶段"
  623. }}</span>
  624. <span v-else>{{ "第" + (index + 1) + "阶段" }}</span>
  625. </div>
  626. <div class="cru_line" :style="{
  627. left: offsetLetfPx + 'px',
  628. }"></div>
  629. </div>
  630. <div class="addStageImg" @click="addunit()" v-if="!(unitJson[unitJson.length - 1].easy == 4) &&
  631. !(unitJson[unitJson.length - 1].easy == 6) && courseState == 1
  632. ">
  633. <img src="../../assets/icon/new/addStage.png" alt />
  634. </div>
  635. <button class="c_pub_button_add pub_btn_add_img" @click="updateCourseState(1)" v-if="courseState == 2" style="margin: 15px 0">新建阶段</button>
  636. <!-- v-if="steps == 3 && (userid == courseUserid || role == '1')" -->
  637. <button class="c_pub_button_add" @click="openStageBox" v-show="false"
  638. style="margin: 0 0 0 auto;">阶段顺序</button>
  639. <button class="c_pub_button_add pub_btn_paste_img" @click="pasteTask" v-if="steps == 3 && isPasteTask"
  640. style="margin: 0 0 0 auto;">智能粘贴</button>
  641. <button class="c_pub_button_confirm pub_btn_template_img" @click="openTemplate"
  642. :style="{margin: isPasteTask ? '0 0 0 20px' : '0 0 0 auto'}" style="padding:0 12px">选择课程模板</button>
  643. </div>
  644. <div style="margin: 0 0 10px 0; padding: 0;" v-for="(item, index) in unitJson[unitIndex].chapterInfo"
  645. :key="index">
  646. <div class="chapter_box" v-if="courseState == 1">
  647. <div class="chapter_contentbox">
  648. <!-- <div>第{{ unitIndex + 1 }}阶段</div> -->
  649. <div class="cc_input">
  650. <input ref="dyInput" type="text" placeholder="请输入阶段标题" class="binfo_input"
  651. v-model="unitJson[unitIndex].dyName" />
  652. </div>
  653. <div class="remove" v-if="(unitJson.length > 1 || courseState != 2) &&
  654. !(unitJson[unitJson.length - 1].easy == 4) &&
  655. !(unitJson[unitJson.length - 1].easy == 6)
  656. " @click="deleteUnit(unitIndex)"></div>
  657. </div>
  658. </div>
  659. <!-- <div v-if="!unitJson[unitIndex].easy" style="
  660. margin: 50px 0px 10px;
  661. font-size: 1.5em;
  662. font-weight: 700;
  663. color: #0f7eff;
  664. ">
  665. 添加任务
  666. </div> -->
  667. <div class="taskBorder" :style="{ minHeight: unitJson[unitIndex].easy && 'unset' }"
  668. :class="{ smallTaskBorder: itemTask.isFold === 1 }"
  669. v-for="(itemTask, itemTaskIndex) in item.taskJson" :key="itemTaskIndex">
  670. <div style="background: #fff;border-radius: 5px;">
  671. <div class="taskTitle">任务{{ itemTaskIndex + 1 }}</div>
  672. <!-- padding: 20px; -->
  673. <div v-if="unitJson[unitIndex].easy != 1">
  674. <div :style="{
  675. marginBottom:
  676. unitJson[unitIndex].easy == 3 ||
  677. (unitJson[unitIndex].easy == 5 &&
  678. itemTask.taskType == 1)
  679. ? '75px'
  680. : '0',
  681. }">
  682. <div style="
  683. display: flex;
  684. margin: 0px 0 20px;
  685. flex-direction: row;
  686. justify-content: flex-start;
  687. align-items: center;
  688. ">
  689. <div class="lineTitle">任务概述</div>
  690. </div>
  691. <div :id="'task' + itemTaskIndex" class="chapter_contentbox" style="
  692. flex-direction: row;
  693. justify-content: flex-start;
  694. align-items: center;
  695. margin:0;
  696. ">
  697. <!-- <div class="cc_title">
  698. 任务{{ itemTaskIndex + 1 }}
  699. </div> -->
  700. <div class="cc_input">
  701. <input type="text" placeholder="输入任务名称" class="binfo_input" style="border-radius: 4px"
  702. v-model="unitJson[unitIndex].chapterInfo[0].taskJson[
  703. itemTaskIndex
  704. ].task
  705. " />
  706. </div>
  707. <div class="remove" v-if="item.taskJson.length > 1 &&
  708. (!unitJson[unitIndex].easy ||
  709. unitJson[unitIndex].easy == 6)
  710. " @click="deleteTask(itemTaskIndex)"></div>
  711. <!-- <div v-if="easyArray.indexOf(unitJson[unitIndex].easy) == -1 && !itemTask.isFold2"
  712. class="show_taskD show" @click="fold2(itemTaskIndex)"><img
  713. src="../../assets/icon/new/icon-slide.png" />收起任务描述</div>
  714. <div v-else-if="easyArray.indexOf(unitJson[unitIndex].easy) == -1" class="show_taskD"
  715. @click="fold2(itemTaskIndex)"><img src="../../assets/icon/new/icon-slide.png" />展开任务描述
  716. </div> -->
  717. </div>
  718. <!-- <div v-if="easyArray.indexOf(unitJson[unitIndex].easy) == -1 && itemTask.isFold2" style="
  719. display: flex;
  720. margin: 20px 0;
  721. flex-direction: row;
  722. justify-content: flex-start;
  723. align-items: center;
  724. ">
  725. <div class="lineTitle">任务描述</div>
  726. </div> && !itemTask.isFold2-->
  727. <div v-if="easyArray.indexOf(unitJson[unitIndex].easy) == -1 "
  728. style="margin-top: 20px;">
  729. <editor-bar class="addEditor" style="margin: 0" placeholder="请输入任务描述" v-model="unitJson[unitIndex].chapterInfo[0].taskJson[
  730. itemTaskIndex
  731. ].taskDetail
  732. " @change="change"></editor-bar>
  733. <!-- <textarea
  734. rows="6"
  735. class="binfo_input"
  736. placeholder="请输入任务描述"
  737. cols
  738. style="width: 70.5% !important; height: 120px"
  739. v-model="
  740. unitJson[unitIndex].chapterInfo[0].taskJson[
  741. itemTaskIndex
  742. ].taskDetail
  743. "
  744. ></textarea>-->
  745. </div>
  746. </div>
  747. </div>
  748. <div style="position:relative" v-if="!unitJson[unitIndex].easy ||
  749. easyArray.indexOf(unitJson[unitIndex].easy) != -1
  750. ">
  751. <div style="
  752. display: flex;
  753. flex-direction: row;
  754. justify-content: space-between;
  755. align-items: center;
  756. " :style="{ margin: !itemTask.isFoldchapter ? '20px 0 10px' : '20px 0 0' }">
  757. <div style="margin-bottom:10px" class="lineTitle clineTitle">学习内容</div>
  758. <!-- <div style="margin-bottom:10px" v-if="!itemTask.isFoldchapter" class="show_taskD show"
  759. @click="foldC(itemTaskIndex)"><img src="../../assets/icon/new/icon-slide.png" />收起学习内容</div>
  760. <div style="margin-bottom:10px" v-else class="show_taskD" @click="foldC(itemTaskIndex)"><img
  761. src="../../assets/icon/new/icon-slide.png" />展开学习内容</div> -->
  762. <!-- <div class="line"></div> -->
  763. </div>
  764. <!-- v-if="!itemTask.isFoldchapter" -->
  765. <div>
  766. <div class="add_chapters_box add_c_none" v-if="itemTask.chapterData &&
  767. itemTask.chapterData.length == 0
  768. "><img src="../../assets/icon/new/c_none.png" alt /><span>请添加学习内容</span></div>
  769. <div v-else class="add_chapters_box" style="display: flex; flex-direction: column">
  770. <div @dragstart="dragStart(item1, index1, itemTaskIndex)" @dragover.prevent="dragOver(index1, itemTaskIndex)"
  771. @dragend="dragEnd()" draggable class="chapter_upload"
  772. v-for="(item1, index1) in itemTask.chapterData" :key="item1.id" @click="
  773. getChapterData(
  774. $event,
  775. unitIndex,
  776. index,
  777. index1,
  778. item1.type
  779. )
  780. " :class="{
  781. dragOverTop2: newIndex === index1 && typeIndex == 'chapter-'+itemTaskIndex+'-'+index1 && oldIndex > index1 && dragType == 'drag',
  782. dragOverBottom2: newIndex === index1 && typeIndex == 'chapter-'+itemTaskIndex+'-'+index1 && oldIndex < index1 && dragType == 'drag',
  783. }">
  784. <div class="chapter_upload_drag"></div>
  785. <div class="chapter_upload_o" style="
  786. position: relative;
  787. display: flex;
  788. align-items: center;
  789. ">
  790. <div class="chapter_upload_l" style="padding: 1px 0 0 10px">
  791. <div v-if="item1.type == 2" class="chapter_upload_l_i2"></div>
  792. <div v-if="item1.type == 3" class="chapter_upload_l_i3" style="margin-left: 1px">
  793. </div>
  794. <div v-if="item1.type == 6" class="chapter_upload_l_i6" style="margin-left: 1px">
  795. </div>
  796. <!-- <div v-if="item1.type == 7" class="chapter_upload_l_i8" style="margin-left: 1px"></div> -->
  797. <div v-if="item1.type == 8" class="chapter_upload_l_i8" style="margin-left: 1px">
  798. </div>
  799. <div v-if="item1.type == 14" class="chapter_upload_l_i14" style="margin-left: 1px">
  800. </div>
  801. <div v-if="item1.type == 12" class="chapter_upload_l_i12" style="margin-left: 1px">
  802. </div>
  803. <div v-if="item1.type == 13" class="chapter_upload_l_i13" style="margin-left: 1px">
  804. </div>
  805. </div>
  806. <div class="chapter_upload_n">
  807. <input readonly="true" v-if="item1.type == 2 ||
  808. item1.type == 3 ||
  809. item1.type == 12 ||
  810. item1.type == 13 ||
  811. item1.type == 7
  812. " :placeholder="item1.name" @click="
  813. updataVideoT(
  814. $event,
  815. unitIndex,
  816. itemTaskIndex,
  817. index1
  818. )
  819. " style="
  820. border: none;
  821. outline: none;
  822. width: 80%;
  823. minwidth: 215px;
  824. z-index: 99;
  825. font-size: 14px;
  826. white-space: nowrap;
  827. overflow: hidden;
  828. text-overflow: ellipsis;
  829. " />
  830. <input :placeholder="item1.name" v-if="item1.type == 6" style="
  831. border: none;
  832. outline: none;
  833. width: 80%;
  834. white-space: nowrap;
  835. overflow: hidden;
  836. text-overflow: ellipsis;
  837. " readonly="true" @click="selectAttText(itemTaskIndex, index1)" />
  838. <input :placeholder="item1.title ? item1.title : '链接'
  839. " v-if="item1.type == 8" style="
  840. border: none;
  841. outline: none;
  842. width: 80%;
  843. white-space: nowrap;
  844. overflow: hidden;
  845. text-overflow: ellipsis;
  846. " readonly="true" @click="selectLine(itemTaskIndex, index1)" />
  847. <input :placeholder="item1.title ? item1.title : '链接'
  848. " v-if="item1.type == 14" style="
  849. border: none;
  850. outline: none;
  851. width: 80%;
  852. white-space: nowrap;
  853. overflow: hidden;
  854. text-overflow: ellipsis;
  855. " readonly="true" @click="openUpdateSource(itemTaskIndex, index1)" />
  856. </div>
  857. <div class="chapter_upload_ic">
  858. <div class="chapter_upload_noSee" v-if="item1.type == 12">
  859. </div>
  860. <div class="chapter_upload_ud" style="z-index: 99">
  861. <div class="chapter_upload_up" @click="
  862. upCd(
  863. $event,
  864. unitIndex,
  865. index,
  866. itemTaskIndex,
  867. index1
  868. )
  869. "></div>
  870. <div class="chapter_upload_down" @click="
  871. downCd(
  872. $event,
  873. unitIndex,
  874. index,
  875. itemTaskIndex,
  876. index1
  877. )
  878. "></div>
  879. </div>
  880. <div class="chapter_upload_ic_edit" v-if="item1.type == 2 ||
  881. item1.type == 3 ||
  882. item1.type == 12 ||
  883. item1.type == 13 ||
  884. item1.type == 7
  885. " @click.stop="
  886. updataVideoT(
  887. $event,
  888. unitIndex,
  889. itemTaskIndex,
  890. index1
  891. )
  892. ">
  893. <div></div>
  894. </div>
  895. <div class="chapter_upload_ic_edit" v-if="item1.type == 6"
  896. @click="selectAttText(itemTaskIndex, index1)">
  897. <div></div>
  898. </div>
  899. <div class="chapter_upload_ic_edit" v-if="item1.type == 8"
  900. @click="selectLine(itemTaskIndex, index1)">
  901. <div></div>
  902. </div>
  903. <div class="chapter_upload_ic_edit" v-if="item1.type == 14"
  904. @click="openUpdateSource(itemTaskIndex, index1)">
  905. <div></div>
  906. </div>
  907. <div class="chapter_upload_ic_r" @click.stop="
  908. deleteChapterData(
  909. $event,
  910. unitIndex,
  911. index,
  912. index1,
  913. itemTaskIndex
  914. )
  915. ">
  916. <div></div>
  917. </div>
  918. </div>
  919. </div>
  920. </div>
  921. </div>
  922. </div>
  923. <!-- v-if="!itemTask.isFoldchapter" -->
  924. <div class="add_info_box" style="margin: 10px 0 0">
  925. <button class="c_pub_button_add pub_btn_add_img" @click="addImg($event)">
  926. 文件
  927. <input type="file" accept="*" style="display: none" v-if="inputShow" @change="
  928. beforeUpload2($event, unitIndex, 13, itemTaskIndex)
  929. " />
  930. </button>
  931. <button class="c_pub_button_add pub_btn_add_img" @click="addAttText(itemTaskIndex)">
  932. 图文
  933. </button>
  934. <button class="c_pub_button_add pub_btn_add_img" @click="openLine(itemTaskIndex)">
  935. 链接
  936. </button>
  937. <button class="c_pub_button_add pub_btn_add_img" @click="pasteLine(itemTaskIndex)">
  938. 代码
  939. </button>
  940. <button class="c_pub_button_add pub_btn_add_img" @click="openSource(itemTaskIndex)">
  941. 资源
  942. </button>
  943. </div>
  944. <div v-if="unitJson[unitIndex].chapterInfo[0].taskJson[
  945. itemTaskIndex
  946. ].proVisible
  947. " class="mask">
  948. <div class="progressBox">
  949. <!-- <div id="closePro" class="closeCss">
  950. <img src="../../../assets/icon/close.png" alt />
  951. </div> -->
  952. <div class="lbox">
  953. <img src="../../assets/loading.gif" />上传中,请稍后
  954. </div>
  955. <div style="margin-bottom: 10px">
  956. <span>{{
  957. unitJson[unitIndex].chapterInfo[0].taskJson[
  958. itemTaskIndex
  959. ].isFinishSize
  960. }}M</span>
  961. /
  962. <span>{{
  963. unitJson[unitIndex].chapterInfo[0].taskJson[
  964. itemTaskIndex
  965. ].isAllSize
  966. }}M</span>
  967. </div>
  968. <el-progress :text-inside="true" :stroke-width="20" :percentage="unitJson[unitIndex].chapterInfo[0].taskJson[
  969. itemTaskIndex
  970. ].progress
  971. ? unitJson[unitIndex].chapterInfo[0].taskJson[
  972. itemTaskIndex
  973. ].progress
  974. : 0
  975. " style="width: 80%"></el-progress>
  976. </div>
  977. </div>
  978. </div>
  979. <div v-if="unitJson[unitIndex].easy == 1 ||
  980. (unitJson[unitIndex].easy == 5 && itemTask.taskType == 2)
  981. ">
  982. <div>
  983. <div class="add_chapters_box add_c_none" v-if="itemTask.chapterData &&
  984. itemTask.chapterData.length == 0
  985. "><img src="../../assets/icon/new/c_none.png" alt /></div>
  986. <div v-else class="add_chapters_box" style="display: flex; flex-direction: column">
  987. <div @dragstart="dragStart(item1, index1, index)" @dragover.prevent="dragOver(index1, itemTaskIndex)"
  988. @dragend="dragEnd()" draggable class="chapter_upload"
  989. v-for="(item1, index1) in itemTask.chapterData" :key="item1.id" @click="
  990. getChapterData(
  991. $event,
  992. unitIndex,
  993. index,
  994. index1,
  995. item1.type
  996. )
  997. " :class="{
  998. dragOverTop2: newIndex === index1 && typeIndex == 'chapter-'+itemTaskIndex+'-'+index1 && oldIndex > index1,
  999. dragOverBottom2: newIndex === index1 && typeIndex == 'chapter-'+itemTaskIndex+'-'+index1 && oldIndex < index1,
  1000. }">
  1001. <div class="chapter_upload_drag"></div>
  1002. <div class="chapter_upload_t" style="width: 100%"></div>
  1003. <div class="chapter_upload_o" style="
  1004. position: relative;
  1005. display: flex;
  1006. align-items: center;
  1007. ">
  1008. <div class="chapter_upload_l" style="padding: 1px 0 0 10px">
  1009. <div v-if="item1.type == 2" class="chapter_upload_l_i2"></div>
  1010. <div v-if="item1.type == 3" class="chapter_upload_l_i3" style="margin-left: 1px">
  1011. </div>
  1012. <div v-if="item1.type == 6" class="chapter_upload_l_i6" style="margin-left: 1px">
  1013. </div>
  1014. <!-- <div v-if="item1.type == 7" class="chapter_upload_l_i8" style="margin-left: 1px"></div> -->
  1015. <div v-if="item1.type == 8" class="chapter_upload_l_i8" style="margin-left: 1px">
  1016. </div>
  1017. <div v-if="item1.type == 14" class="chapter_upload_l_i14" style="margin-left: 1px">
  1018. </div>
  1019. <div v-if="item1.type == 12" class="chapter_upload_l_i12" style="margin-left: 1px">
  1020. </div>
  1021. <div v-if="item1.type == 13" class="chapter_upload_l_i13" style="margin-left: 1px">
  1022. </div>
  1023. </div>
  1024. <div class="chapter_upload_n">
  1025. <span style="
  1026. font-size: 14px;
  1027. color: rgb(109, 109, 109);
  1028. height: 14px;
  1029. line-height: 14px;
  1030. " v-if="item1.type == 2 ||
  1031. item1.type == 3 ||
  1032. item1.type == 7
  1033. ">{{ item1.text }}-</span>
  1034. <input readonly="true" v-if="item1.type == 2 ||
  1035. item1.type == 3 ||
  1036. item1.type == 7
  1037. " :placeholder="item1.name" @click="
  1038. updataVideoT(
  1039. $event,
  1040. unitIndex,
  1041. itemTaskIndex,
  1042. index1
  1043. )
  1044. " style="
  1045. border: none;
  1046. outline: none;
  1047. width: 80%;
  1048. minwidth: 215px;
  1049. z-index: 99;
  1050. font-size: 14px;
  1051. white-space: nowrap;
  1052. overflow: hidden;
  1053. text-overflow: ellipsis;
  1054. " />
  1055. <input :placeholder="item1.name" v-if="item1.type == 6" style="
  1056. border: none;
  1057. outline: none;
  1058. width: 80%;
  1059. white-space: nowrap;
  1060. overflow: hidden;
  1061. text-overflow: ellipsis;
  1062. " readonly="true" @click="selectAttText(itemTaskIndex, index1)" />
  1063. <input :placeholder="item1.title ? item1.title : '链接'
  1064. " v-if="item1.type == 8 || item1.type == 14" style="
  1065. border: none;
  1066. outline: none;
  1067. width: 80%;
  1068. white-space: nowrap;
  1069. overflow: hidden;
  1070. text-overflow: ellipsis;
  1071. " readonly="true" @click="selectLine(itemTaskIndex, index1)" />
  1072. </div>
  1073. <div class="chapter_upload_ic">
  1074. <div class="chapter_upload_noSee" v-if="item1.type == 12">
  1075. </div>
  1076. <div class="chapter_upload_ud" style="z-index: 99">
  1077. <div class="chapter_upload_up" @click="
  1078. upCd(
  1079. $event,
  1080. unitIndex,
  1081. index,
  1082. itemTaskIndex,
  1083. index1
  1084. )
  1085. "></div>
  1086. <div class="chapter_upload_down" @click="
  1087. downCd(
  1088. $event,
  1089. unitIndex,
  1090. index,
  1091. itemTaskIndex,
  1092. index1
  1093. )
  1094. "></div>
  1095. </div>
  1096. <div class="chapter_upload_ic_edit" v-if="item1.type == 2 ||
  1097. item1.type == 3 ||
  1098. item1.type == 12 ||
  1099. item1.type == 13 ||
  1100. item1.type == 7
  1101. " @click.stop="
  1102. updataVideoT(
  1103. $event,
  1104. unitIndex,
  1105. itemTaskIndex,
  1106. index1
  1107. )
  1108. ">
  1109. <div></div>
  1110. </div>
  1111. <div class="chapter_upload_ic_edit" v-if="item1.type == 6"
  1112. @click="selectAttText(itemTaskIndex, index1)">
  1113. <div></div>
  1114. </div>
  1115. <div class="chapter_upload_ic_edit" v-if="item1.type == 8"
  1116. @click="selectLine(itemTaskIndex, index1)">
  1117. <div></div>
  1118. </div>
  1119. <div class="chapter_upload_ic_edit" v-if="item1.type == 14"
  1120. @click="openUpdateSource(itemTaskIndex, index1)">
  1121. <div></div>
  1122. </div>
  1123. <div class="chapter_upload_ic_r" @click.stop="
  1124. deleteChapterData(
  1125. $event,
  1126. unitIndex,
  1127. index,
  1128. index1,
  1129. itemTaskIndex
  1130. )
  1131. ">
  1132. <div></div>
  1133. </div>
  1134. </div>
  1135. </div>
  1136. </div>
  1137. </div>
  1138. </div>
  1139. <div class="add_info_box" style="margin: 10px 0 0">
  1140. <button class="c_pub_button_add pub_btn_add_img" @click="addImg($event)">
  1141. <span style="color: red">*</span>
  1142. 教学设计
  1143. <input type="file"
  1144. accept="application/pdf, application/.ppt, .ppt, .pptx, .xlsx, .xls, application/msword, application/vnd.openxmlformats-officedocument.wordprocessingml.document"
  1145. style="display: none" v-if="inputShow" @change="
  1146. beforeUpload3(
  1147. $event,
  1148. unitIndex,
  1149. 3,
  1150. itemTaskIndex,
  1151. '教学设计'
  1152. )
  1153. " />
  1154. </button>
  1155. <button class="c_pub_button_add pub_btn_add_img" @click="addImg($event)">
  1156. <span style="color: red">*</span>
  1157. 教学课件
  1158. <input type="file"
  1159. accept="application/pdf, application/.ppt, .ppt, .pptx, .xlsx, .xls, application/msword, application/vnd.openxmlformats-officedocument.wordprocessingml.document"
  1160. style="display: none" v-if="inputShow" @change="
  1161. beforeUpload3(
  1162. $event,
  1163. unitIndex,
  1164. 3,
  1165. itemTaskIndex,
  1166. '教学课件'
  1167. )
  1168. " />
  1169. </button>
  1170. <button class="c_pub_button_add pub_btn_add_img" @click="addImg($event)">
  1171. 教学视频
  1172. <input type="file" accept="video/mp4, video/quicktime, video/x-msvideo"
  1173. style="display: none" v-if="inputShow" @change="
  1174. beforeUpload3(
  1175. $event,
  1176. unitIndex,
  1177. 2,
  1178. itemTaskIndex,
  1179. '教学视频'
  1180. )
  1181. " />
  1182. </button>
  1183. <button class="c_pub_button_add pub_btn_add_img" @click="addImg($event)">
  1184. 教学音频
  1185. <input type="file" accept="audio/*" style="display: none" v-if="inputShow" @change="
  1186. beforeUpload3(
  1187. $event,
  1188. unitIndex,
  1189. 2,
  1190. itemTaskIndex,
  1191. '教学音频'
  1192. )
  1193. " />
  1194. </button>
  1195. <button class="c_pub_button_add pub_btn_add_img" @click="addImg($event)">
  1196. 学习单
  1197. <input type="file"
  1198. accept="application/pdf, application/.ppt, .ppt, .pptx, .xlsx, .xls, application/msword, application/vnd.openxmlformats-officedocument.wordprocessingml.document"
  1199. style="display: none" v-if="inputShow" @change="
  1200. beforeUpload3(
  1201. $event,
  1202. unitIndex,
  1203. 3,
  1204. itemTaskIndex,
  1205. '学习单'
  1206. )
  1207. " />
  1208. </button>
  1209. </div>
  1210. <div v-if="unitJson[unitIndex].chapterInfo[0].taskJson[
  1211. itemTaskIndex
  1212. ].proVisible
  1213. " class="mask">
  1214. <div class="progressBox">
  1215. <!-- <div id="closePro" class="closeCss">
  1216. <img src="../../../assets/icon/close.png" alt />
  1217. </div> -->
  1218. <div class="lbox">
  1219. <img src="../../assets/loading.gif" />上传中,请稍后
  1220. </div>
  1221. <div style="margin-bottom: 10px">
  1222. <span>{{
  1223. unitJson[unitIndex].chapterInfo[0].taskJson[
  1224. itemTaskIndex
  1225. ].isFinishSize
  1226. }}M</span>
  1227. /
  1228. <span>{{
  1229. unitJson[unitIndex].chapterInfo[0].taskJson[
  1230. itemTaskIndex
  1231. ].isAllSize
  1232. }}M</span>
  1233. </div>
  1234. <el-progress :text-inside="true" :stroke-width="20" :percentage="unitJson[unitIndex].chapterInfo[0].taskJson[
  1235. itemTaskIndex
  1236. ].progress
  1237. ? unitJson[unitIndex].chapterInfo[0].taskJson[
  1238. itemTaskIndex
  1239. ].progress
  1240. : 0
  1241. " style="width: 80%"></el-progress>
  1242. </div>
  1243. </div>
  1244. </div>
  1245. </div>
  1246. <!-- padding: 20px; -->
  1247. <div style="background: #fff;border-radius: 5px;margin-top: 15px;">
  1248. <div v-if="unitJson[unitIndex].easy != 3 &&
  1249. !(unitJson[unitIndex].easy == 5 && itemTask.taskType == 1)
  1250. " style="
  1251. flex-direction: row;
  1252. justify-content: flex-start;
  1253. align-items: center;
  1254. ">
  1255. <div style="
  1256. display: flex;
  1257. flex-direction: row;
  1258. align-items: center;
  1259. margin: 5px 0 20px;
  1260. ">
  1261. <div class="lineTitle clineTitle">
  1262. {{
  1263. !unitJson[unitIndex].easy ||
  1264. unitJson[unitIndex].easy == 6 ||
  1265. easyArray.indexOf(unitJson[unitIndex].easy) != -1
  1266. ? "练习内容"
  1267. : "评价内容"
  1268. }}
  1269. </div>
  1270. <!-- <div class="line" style="width: 90%"></div> -->
  1271. </div>
  1272. </div>
  1273. <div v-if="unitJson[unitIndex].easy == 6 || !unitJson[unitIndex].easy
  1274. " class="toolChoose">
  1275. <div class="tools">
  1276. <div class="leftTools" style="
  1277. width: 100%;
  1278. " v-for="(itemTool, toolIndex) in itemTask.toolChoose" :key="toolIndex">
  1279. <div style="
  1280. display: flex;
  1281. flex-direction: row;
  1282. align-items: baseline;
  1283. flex-wrap: nowrap;
  1284. justify-content: flex-start;
  1285. position: relative;
  1286. ">
  1287. <div style="margin-right: 20px; font-weight: bold"
  1288. :id="'gj' + itemTaskIndex + '' + toolIndex">
  1289. 工具 {{ toolIndex + 1 }}
  1290. </div>
  1291. <div class="chooseWho">
  1292. <div :class="itemTool.toolType == 0 ? 'isChooseActive' : ''
  1293. " @click="(itemTool.toolType = 0), (itemTool.isFold3 = false), $forceUpdate()">
  1294. 互动类
  1295. </div>
  1296. <div :class="itemTool.toolType == 1 ? 'isChooseActive' : ''
  1297. " @click="(itemTool.toolType = 1), (itemTool.isFold3 = false), $forceUpdate()">
  1298. 思维类
  1299. </div>
  1300. <div :class="itemTool.toolType == 6 ? 'isChooseActive' : ''
  1301. " @click="(itemTool.toolType = 6), (itemTool.isFold3 = false), $forceUpdate()">
  1302. 协作类
  1303. </div>
  1304. <div :class="itemTool.toolType == 2 ? 'isChooseActive' : ''
  1305. " @click="(itemTool.toolType = 2), (itemTool.isFold3 = false), $forceUpdate()">
  1306. 测评类
  1307. </div>
  1308. <div :class="itemTool.toolType == 7 ? 'isChooseActive' : ''
  1309. " @click="(itemTool.toolType = 7), (itemTool.isFold3 = false), $forceUpdate()">
  1310. 评价类
  1311. </div>
  1312. <div :class="itemTool.toolType == 3 ? 'isChooseActive' : ''
  1313. " @click="(itemTool.toolType = 3), (itemTool.isFold3 = false), $forceUpdate()">
  1314. 编程类
  1315. </div>
  1316. <div :class="itemTool.toolType == 5 ? 'isChooseActive' : ''
  1317. " @click="(itemTool.toolType = 5), (itemTool.isFold3 = false), $forceUpdate()">
  1318. 学科类
  1319. </div>
  1320. <!-- <div :class="itemTool.toolType == 4 ? 'isChooseActive' : ''
  1321. " @click="(itemTool.toolType = 4), $forceUpdate()">
  1322. 其他
  1323. </div> -->
  1324. </div>
  1325. <div class="chapter_upload_ud2" style="z-index: 9;margin:0 0 0 auto" :style="{ margin: itemTask.toolChoose.length > 1 ? '0px 35px 0px auto' : '0 0 0 auto' }" v-if="itemTask.toolChoose.length > 1">
  1326. <div class="chapter_upload_up2" @click.stop="
  1327. upTool(
  1328. $event,
  1329. unitIndex,
  1330. itemTaskIndex,
  1331. toolIndex
  1332. )
  1333. ">上移</div>
  1334. <div class="chapter_upload_down2" @click.stop="
  1335. downTool(
  1336. $event,
  1337. unitIndex,
  1338. itemTaskIndex,
  1339. toolIndex
  1340. )
  1341. ">下移</div>
  1342. </div>
  1343. <!-- <div v-if="!itemTool.isFold3" class="show_toolD show"
  1344. @click="fold3(itemTaskIndex, toolIndex)"
  1345. :style="{ margin: itemTask.toolChoose.length > 1 ? '0px 35px 0px 10px' : '0 0 0 auto' }"><img
  1346. src="../../assets/icon/new/icon-slide.png" />收起工具栏</div>
  1347. <div v-else class="show_toolD" @click="fold3(itemTaskIndex, toolIndex)"
  1348. :style="{ margin: itemTask.toolChoose.length > 1 ? '0px 35px 0px 10px' : '0 0 0 auto' }"><img
  1349. src="../../assets/icon/new/icon-slide.png" />展开工具栏</div> -->
  1350. <div class="remove" @click="deleteTool(itemTaskIndex, toolIndex)"
  1351. v-if="itemTask.toolChoose.length > 1" style="position: absolute; right: 0;top:-5px;"></div>
  1352. </div>
  1353. <!-- v-show="!itemTool.isFold3" -->
  1354. <div style="min-height: 163px">
  1355. <div class="toolSort" v-if="itemTool.toolType == 0">
  1356. <!-- <div class="tool">
  1357. <div
  1358. class="whiteBIcon"
  1359. @click="addTools(8, itemTaskIndex, toolIndex)"
  1360. >
  1361. <img src="../../assets/icon/secondToolList/library.png" alt />
  1362. <div style="margin: 5px 0">素材库</div>
  1363. </div>
  1364. <div class="check" @click="addTools(8, itemTaskIndex, toolIndex)">
  1365. <img
  1366. src="../../assets/icon/checkNo.png"
  1367. alt
  1368. v-if="itemTool.tool.indexOf(8) == -1"
  1369. />
  1370. <div class="checkDiv" v-else><img src="../../assets/icon/checkedIs.png"
  1371. alt /><span>已选择</span></div>
  1372. </div>
  1373. </div>-->
  1374. <!-- <div class="tool">
  1375. <div
  1376. class="whiteBIcon"
  1377. @click="addTools(17, itemTaskIndex, toolIndex)"
  1378. >
  1379. <img
  1380. src="../../assets/icon/secondToolList/library.png"
  1381. alt
  1382. />
  1383. <div style="margin: 5px 0">学习资料</div>
  1384. </div>
  1385. <div
  1386. class="check"
  1387. @click="addTools(17, itemTaskIndex, toolIndex)"
  1388. >
  1389. <img
  1390. src="../../assets/icon/checkNo.png"
  1391. alt
  1392. v-if="itemTool.tool.indexOf(17) == -1"
  1393. />
  1394. <img
  1395. src="../../assets/icon/checkedIs.png"
  1396. alt
  1397. v-else
  1398. />
  1399. </div>10
  1400. </div> -->
  1401. <div class="tool" :class="{ isToolChoose: itemTool.tool.indexOf(10) != -1 }"
  1402. @click="addTools(10, itemTaskIndex, toolIndex)">
  1403. <div class="whiteBIcon" @click.stop="openTools(itemTaskIndex, 10, toolIndex)">
  1404. <img src="../../assets/icon/thirdToolList/time.png" alt />
  1405. <div style="margin: 5px 0">倒计时</div>
  1406. </div>
  1407. <div class="noCTool"><img src="../../assets/icon/new/isToolC.png" alt="" /></div>
  1408. <div class="isCTool" v-if="itemTool.tool.indexOf(10) != -1"><img
  1409. src="../../assets/icon/new/isToolC.png" alt="" /></div>
  1410. <!-- <div class="check" @click="addTools(10, itemTaskIndex, toolIndex)">
  1411. <img src="../../assets/icon/checkNo.png" alt
  1412. v-if="itemTool.tool.indexOf(10) == -1" />
  1413. <div class="checkDiv" v-else>
  1414. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  1415. </div>
  1416. </div> -->
  1417. </div>
  1418. <div class="tool" :class="{ isToolChoose: itemTool.tool.indexOf(65) != -1 }"
  1419. @click="addTools(65, itemTaskIndex, toolIndex)">
  1420. <div class="whiteBIcon" @click.stop="addTools(65, itemTaskIndex, toolIndex)">
  1421. <img src="../../assets/icon/firstToolList/pickPeople.png" alt />
  1422. <div style="margin: 5px 0">挑人</div>
  1423. </div>
  1424. <div class="noCTool"><img src="../../assets/icon/new/isToolC.png" alt="" /></div>
  1425. <div class="isCTool" v-if="itemTool.tool.indexOf(65) != -1"><img
  1426. src="../../assets/icon/new/isToolC.png" alt="" /></div>
  1427. <!-- <div class="check" @click="addTools(65, itemTaskIndex, toolIndex)">
  1428. <img src="../../assets/icon/checkNo.png" alt
  1429. v-if="itemTool.tool.indexOf(65) == -1" />
  1430. <div class="checkDiv" v-else>
  1431. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  1432. </div>
  1433. </div> -->
  1434. </div>
  1435. <!-- <div class="tool">
  1436. <div class="whiteBIcon" @click="openTools(itemTaskIndex, 49, toolIndex)">
  1437. <img src="../../assets/icon/fourthToolList/group.png" alt />
  1438. <div style="margin: 5px 0">学生分组</div>
  1439. </div>
  1440. <div class="check" @click="addTools(49, itemTaskIndex, toolIndex)">
  1441. <img src="../../assets/icon/checkNo.png" alt v-if="itemTool.tool.indexOf(49) == -1" />
  1442. <div class="checkDiv" v-else>
  1443. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  1444. </div>
  1445. </div>
  1446. </div> -->
  1447. <!-- <div class="tool">
  1448. <div class="whiteBIcon" @click="openTools(itemTaskIndex, 62, toolIndex)">
  1449. <img src="../../assets/icon/fourthToolList/interVideo.png" alt />
  1450. <div style="margin: 5px 0">交互视频</div>
  1451. </div>
  1452. <div class="check" @click="addTools(62, itemTaskIndex, toolIndex)">
  1453. <img src="../../assets/icon/checkNo.png" alt v-if="itemTool.tool.indexOf(62) == -1" />
  1454. <div class="checkDiv" v-else>
  1455. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  1456. </div>
  1457. </div>
  1458. </div> -->
  1459. </div>
  1460. <div class="toolSort" v-if="itemTool.toolType == 1">
  1461. <div class="tool" :class="{ isToolChoose: itemTool.tool.indexOf(7) != -1 }"
  1462. @click="addTools(7, itemTaskIndex, toolIndex)">
  1463. <div class="whiteBIcon" @click.stop="addTools(7, itemTaskIndex, toolIndex)">
  1464. <img src="../../assets/icon/secondToolList/mindNetwork.png" alt />
  1465. <div style="margin: 5px 0">思维网格</div>
  1466. </div>
  1467. <div class="noCTool"><img src="../../assets/icon/new/isToolC.png" alt="" /></div>
  1468. <div class="isCTool" v-if="itemTool.tool.indexOf(7) != -1"><img
  1469. src="../../assets/icon/new/isToolC.png" alt="" /></div>
  1470. <!-- <div class="check" @click="addTools(7, itemTaskIndex, toolIndex)">
  1471. <img src="../../assets/icon/checkNo.png" alt
  1472. v-if="itemTool.tool.indexOf(7) == -1" />
  1473. <div class="checkDiv" v-else>
  1474. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  1475. </div>
  1476. </div> -->
  1477. </div>
  1478. <div class="tool" :class="{ isToolChoose: itemTool.tool.indexOf(1) != -1 }"
  1479. @click="addTools(1, itemTaskIndex, toolIndex)">
  1480. <div class="whiteBIcon" @click.stop="openTools(itemTaskIndex, 1, toolIndex)">
  1481. <img src="../../assets/icon/secondToolList/whiteBoard.png" alt />
  1482. <div style="margin: 5px 0">电子白板</div>
  1483. </div>
  1484. <div class="noCTool"><img src="../../assets/icon/new/isToolC.png" alt="" /></div>
  1485. <div class="isCTool" v-if="itemTool.tool.indexOf(1) != -1"><img
  1486. src="../../assets/icon/new/isToolC.png" alt="" /></div>
  1487. <!-- <div class="check" @click="addTools(1, itemTaskIndex, toolIndex)">
  1488. <img src="../../assets/icon/checkNo.png" alt
  1489. v-if="itemTool.tool.indexOf(1) == -1" />
  1490. <div class="checkDiv" v-else>
  1491. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  1492. </div>
  1493. </div> -->
  1494. </div>
  1495. <!-- <div class="tool">
  1496. <div
  1497. class="whiteBIcon"
  1498. @click="addTools(2, itemTaskIndex, toolIndex)"
  1499. >
  1500. <img
  1501. src="../../assets/icon/secondToolList/note.png"
  1502. alt
  1503. />
  1504. <div style="margin: 5px 0">便签</div>
  1505. </div>
  1506. <div
  1507. class="check"
  1508. @click="addTools(2, itemTaskIndex, toolIndex)"
  1509. >
  1510. <img
  1511. src="../../assets/icon/checkNo.png"
  1512. alt
  1513. v-if="itemTool.tool.indexOf(2) == -1"
  1514. />
  1515. <div class="checkDiv" v-else>
  1516. <img
  1517. src="../../assets/icon/checkedIs.png"
  1518. alt
  1519. /><span>已选择</span>
  1520. </div>
  1521. </div>
  1522. </div> -->
  1523. <!-- <div class="tool">
  1524. <div class="whiteBIcon" @click="addTools(6, itemTaskIndex, toolIndex)">
  1525. <img src="../../assets/icon/secondToolList/doc.png" alt />
  1526. <div style="margin: 5px 0">协同文档</div>
  1527. </div>
  1528. <div
  1529. class="check"
  1530. @click="addTools(6, itemTaskIndex, toolIndex)"
  1531. >
  1532. <img
  1533. src="../../assets/icon/checkNo.png"
  1534. alt
  1535. v-if="itemTool.tool.indexOf(6) == -1"
  1536. />
  1537. <div class="checkDiv" v-else>
  1538. <img
  1539. src="../../assets/icon/checkedIs.png"
  1540. alt
  1541. /><span>已选择</span>
  1542. </div>
  1543. </div>
  1544. </div> -->
  1545. <div class="tool" :class="{ isToolChoose: itemTool.tool.indexOf(52) != -1 }"
  1546. @click="addTools(52, itemTaskIndex, toolIndex)">
  1547. <div class="whiteBIcon" @click.stop="openTools(itemTaskIndex, 52, toolIndex)">
  1548. <img src="../../assets/icon/fourthToolList/text.png" alt />
  1549. <div style="margin: 5px 0">文档</div>
  1550. </div>
  1551. <div class="noCTool"><img src="../../assets/icon/new/isToolC.png" alt="" /></div>
  1552. <div class="isCTool" v-if="itemTool.tool.indexOf(52) != -1"><img
  1553. src="../../assets/icon/new/isToolC.png" alt="" /></div>
  1554. <!-- <div class="check" @click="addTools(52, itemTaskIndex, toolIndex)">
  1555. <img src="../../assets/icon/checkNo.png" alt
  1556. v-if="itemTool.tool.indexOf(52) == -1" />
  1557. <div class="checkDiv" v-else>
  1558. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  1559. </div>
  1560. </div> -->
  1561. </div>
  1562. <div class="tool" :class="{ isToolChoose: itemTool.tool.indexOf(3) != -1 }"
  1563. @click="addTools(3, itemTaskIndex, toolIndex)">
  1564. <div class="whiteBIcon" @click.stop="openTools(itemTaskIndex, 3, toolIndex)">
  1565. <img src="../../assets/icon/secondToolList/mindMapping.png" alt />
  1566. <div style="margin: 5px 0">思维导图</div>
  1567. </div>
  1568. <div class="noCTool"><img src="../../assets/icon/new/isToolC.png" alt="" /></div>
  1569. <div class="isCTool" v-if="itemTool.tool.indexOf(3) != -1"><img
  1570. src="../../assets/icon/new/isToolC.png" alt="" /></div>
  1571. <!-- <div class="check" @click="addTools(3, itemTaskIndex, toolIndex)">
  1572. <img src="../../assets/icon/checkNo.png" alt
  1573. v-if="itemTool.tool.indexOf(3) == -1" />
  1574. <div class="checkDiv" v-else>
  1575. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  1576. </div>
  1577. </div> -->
  1578. </div>
  1579. <div class="tool" :class="{ isToolChoose: itemTool.tool.indexOf(48) != -1 }"
  1580. @click="addTools(48, itemTaskIndex, toolIndex)">
  1581. <div class="whiteBIcon" @click.stop="openTools(itemTaskIndex, 48, toolIndex)">
  1582. <img src="../../assets/icon/fourthToolList/table.png" alt />
  1583. <div style="margin: 5px 0">表格</div>
  1584. </div>
  1585. <div class="noCTool"><img src="../../assets/icon/new/isToolC.png" alt="" /></div>
  1586. <div class="isCTool" v-if="itemTool.tool.indexOf(48) != -1"><img
  1587. src="../../assets/icon/new/isToolC.png" alt="" /></div>
  1588. <!-- <div class="check" @click="addTools(48, itemTaskIndex, toolIndex)">
  1589. <img src="../../assets/icon/checkNo.png" alt
  1590. v-if="itemTool.tool.indexOf(48) == -1" />
  1591. <div class="checkDiv" v-else>
  1592. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  1593. </div>
  1594. </div> -->
  1595. </div>
  1596. </div>
  1597. <div class="toolSort" v-if="itemTool.toolType == 6">
  1598. <div class="tool" :class="{ isToolChoose: itemTool.tool.indexOf(49) != -1 }"
  1599. @click="addTools(49, itemTaskIndex, toolIndex)">
  1600. <div class="whiteBIcon" @click.stop="openTools(itemTaskIndex, 49, toolIndex)">
  1601. <img src="../../assets/icon/fourthToolList/group.png" alt />
  1602. <div style="margin: 5px 0">学生分组</div>
  1603. </div>
  1604. <div class="noCTool"><img src="../../assets/icon/new/isToolC.png" alt="" /></div>
  1605. <div class="isCTool" v-if="itemTool.tool.indexOf(49) != -1"><img
  1606. src="../../assets/icon/new/isToolC.png" alt="" /></div>
  1607. <!-- <div class="check" @click="addTools(49, itemTaskIndex, toolIndex)">
  1608. <img src="../../assets/icon/checkNo.png" alt
  1609. v-if="itemTool.tool.indexOf(49) == -1" />
  1610. <div class="checkDiv" v-else>
  1611. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  1612. </div>
  1613. </div> -->
  1614. </div>
  1615. </div>
  1616. <div class="toolSort" v-if="itemTool.toolType == 2">
  1617. <!-- <div class="tool">
  1618. <div
  1619. class="whiteBIcon"
  1620. @click="addTools(5, itemTaskIndex, toolIndex)"
  1621. >
  1622. <img
  1623. src="../../assets/icon/thirdToolList/score.png"
  1624. alt
  1625. />
  1626. <div style="margin: 5px 0">量规评分</div>
  1627. </div>
  1628. <div
  1629. class="check"
  1630. @click="addTools(5, itemTaskIndex, toolIndex)"
  1631. >
  1632. <img
  1633. src="../../assets/icon/checkNo.png"
  1634. alt
  1635. v-if="itemTool.tool.indexOf(5) == -1"
  1636. />
  1637. <img
  1638. src="../../assets/icon/checkedIs.png"
  1639. alt
  1640. v-else
  1641. />
  1642. </div>
  1643. </div>-->
  1644. <div class="tool" :class="{ isToolChoose: itemTool.tool.indexOf(4) != -1 }"
  1645. @click="addTools(4, itemTaskIndex, toolIndex)">
  1646. <div class="whiteBIcon" @click.stop="openTools(itemTaskIndex, 4, toolIndex)">
  1647. <img src="../../assets/icon/thirdToolList/ask.png" alt />
  1648. <div style="margin: 5px 0">问卷调查</div>
  1649. </div>
  1650. <div class="noCTool"><img src="../../assets/icon/new/isToolC.png" alt="" /></div>
  1651. <div class="isCTool" v-if="itemTool.tool.indexOf(4) != -1"><img
  1652. src="../../assets/icon/new/isToolC.png" alt="" /></div>
  1653. <!-- <div class="check" @click="addTools(4, itemTaskIndex, toolIndex)">
  1654. <img src="../../assets/icon/checkNo.png" alt
  1655. v-if="itemTool.tool.indexOf(4) == -1" />
  1656. <div class="checkDiv" v-else>
  1657. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  1658. </div>
  1659. </div> -->
  1660. </div>
  1661. <div class="tool" :class="{ isToolChoose: itemTool.tool.indexOf(45) != -1 }"
  1662. @click="addTools(45, itemTaskIndex, toolIndex)">
  1663. <div class="whiteBIcon" @click="openTools(itemTaskIndex, 45, toolIndex)">
  1664. <img src="../../assets/icon/thirdToolList/choose.png" alt />
  1665. <div style="margin: 5px 0">选择题</div>
  1666. </div>
  1667. <div class="noCTool"><img src="../../assets/icon/new/isToolC.png" alt="" /></div>
  1668. <div class="isCTool" v-if="itemTool.tool.indexOf(45) != -1"><img
  1669. src="../../assets/icon/new/isToolC.png" alt="" /></div>
  1670. <!-- <div class="check" @click="addTools(45, itemTaskIndex, toolIndex)">
  1671. <img src="../../assets/icon/checkNo.png" alt
  1672. v-if="itemTool.tool.indexOf(45) == -1" />
  1673. <div class="checkDiv" v-else>
  1674. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  1675. </div>
  1676. </div> -->
  1677. </div>
  1678. <div class="tool" :class="{ isToolChoose: itemTool.tool.indexOf(15) != -1 }"
  1679. @click="addTools(15, itemTaskIndex, toolIndex)">
  1680. <div class="whiteBIcon" @click.stop="openTools(itemTaskIndex, 15, toolIndex)">
  1681. <img src="../../assets/icon/thirdToolList/answer.png" alt />
  1682. <div style="margin: 5px 0">问答</div>
  1683. </div>
  1684. <div class="noCTool"><img src="../../assets/icon/new/isToolC.png" alt="" /></div>
  1685. <div class="isCTool" v-if="itemTool.tool.indexOf(15) != -1"><img
  1686. src="../../assets/icon/new/isToolC.png" alt="" /></div>
  1687. <!-- <div class="check" @click="addTools(15, itemTaskIndex, toolIndex)">
  1688. <img src="../../assets/icon/checkNo.png" alt
  1689. v-if="itemTool.tool.indexOf(15) == -1" />
  1690. <div class="checkDiv" v-else>
  1691. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  1692. </div>
  1693. </div> -->
  1694. </div>
  1695. <div class="tool" :class="{ isToolChoose: itemTool.tool.indexOf(16) != -1 }"
  1696. @click="addTools(16, itemTaskIndex, toolIndex)">
  1697. <div class="whiteBIcon" @click.stop="addTools(16, itemTaskIndex, toolIndex)">
  1698. <img src="../../assets/icon/thirdToolList/work.png" alt />
  1699. <div style="margin: 5px 0">作业提交</div>
  1700. </div>
  1701. <div class="noCTool"><img src="../../assets/icon/new/isToolC.png" alt="" /></div>
  1702. <div class="isCTool" v-if="itemTool.tool.indexOf(16) != -1"><img
  1703. src="../../assets/icon/new/isToolC.png" alt="" /></div>
  1704. <!-- <div class="check" @click="addTools(16, itemTaskIndex, toolIndex)">
  1705. <img src="../../assets/icon/checkNo.png" alt
  1706. v-if="itemTool.tool.indexOf(16) == -1" />
  1707. <div class="checkDiv" v-else>
  1708. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  1709. </div>
  1710. </div> -->
  1711. </div>
  1712. <div class="tool" :class="{ isToolChoose: itemTool.tool.indexOf(50) != -1 }"
  1713. @click="addTools(50, itemTaskIndex, toolIndex)">
  1714. <div class="whiteBIcon" @click.stop="addTools(50, itemTaskIndex, toolIndex)">
  1715. <img src="../../assets/icon/thirdToolList/plwork.png" alt />
  1716. <div style="margin: 5px 0">批量上传</div>
  1717. </div>
  1718. <div class="noCTool"><img src="../../assets/icon/new/isToolC.png" alt="" /></div>
  1719. <div class="isCTool" v-if="itemTool.tool.indexOf(50) != -1"><img
  1720. src="../../assets/icon/new/isToolC.png" alt="" /></div>
  1721. <!-- <div class="check" @click="addTools(50, itemTaskIndex, toolIndex)">
  1722. <img src="../../assets/icon/checkNo.png" alt
  1723. v-if="itemTool.tool.indexOf(50) == -1" />
  1724. <div class="checkDiv" v-else>
  1725. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  1726. </div>
  1727. </div> -->
  1728. </div>
  1729. <!-- <div class="tool">
  1730. <div class="whiteBIcon" @click="openTools(itemTaskIndex, 40, toolIndex)">
  1731. <img src="../../assets/icon/thirdToolList/eval.png" alt />
  1732. <div style="margin: 5px 0">个人评价</div>
  1733. </div>
  1734. <div class="check" @click="addTools(40, itemTaskIndex, toolIndex)">
  1735. <img src="../../assets/icon/checkNo.png" alt v-if="itemTool.tool.indexOf(40) == -1" />
  1736. <div class="checkDiv" v-else>
  1737. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  1738. </div>
  1739. </div>
  1740. </div> -->
  1741. <div class="tool" :class="{ isToolChoose: itemTool.tool.indexOf(41) != -1 }"
  1742. @click="addTools(41, itemTaskIndex, toolIndex)">
  1743. <div class="whiteBIcon" @click.stop="openTools(itemTaskIndex, 41, toolIndex)">
  1744. <img src="../../assets/icon/thirdToolList/select.png" alt />
  1745. <div style="margin: 5px 0">选择匹配</div>
  1746. </div>
  1747. <div class="noCTool"><img src="../../assets/icon/new/isToolC.png" alt="" /></div>
  1748. <div class="isCTool" v-if="itemTool.tool.indexOf(41) != -1"><img
  1749. src="../../assets/icon/new/isToolC.png" alt="" /></div>
  1750. <!-- <div class="check" @click="addTools(41, itemTaskIndex, toolIndex)">
  1751. <img src="../../assets/icon/checkNo.png" alt
  1752. v-if="itemTool.tool.indexOf(41) == -1" />
  1753. <div class="checkDiv" v-else>
  1754. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  1755. </div>
  1756. </div> -->
  1757. </div>
  1758. <div class="tool" :class="{ isToolChoose: itemTool.tool.indexOf(47) != -1 }"
  1759. @click="addTools(47, itemTaskIndex, toolIndex)">
  1760. <div class="whiteBIcon" @click.stop="openTools(itemTaskIndex, 47, toolIndex)">
  1761. <img src="../../assets/icon/fourthToolList/conSentences.png" alt />
  1762. <div style="margin: 5px 0">排序</div>
  1763. </div>
  1764. <div class="noCTool"><img src="../../assets/icon/new/isToolC.png" alt="" /></div>
  1765. <div class="isCTool" v-if="itemTool.tool.indexOf(47) != -1"><img
  1766. src="../../assets/icon/new/isToolC.png" alt="" /></div>
  1767. <!-- <div class="check" @click="addTools(47, itemTaskIndex, toolIndex)">
  1768. <img src="../../assets/icon/checkNo.png" alt
  1769. v-if="itemTool.tool.indexOf(47) == -1" />
  1770. <div class="checkDiv" v-else>
  1771. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  1772. </div>
  1773. </div> -->
  1774. </div>
  1775. <!-- <div class="tool">
  1776. <div
  1777. class="whiteBIcon"
  1778. @click="openTools(itemTaskIndex, 42, toolIndex)"
  1779. >
  1780. <img
  1781. src="../../assets/icon/thirdToolList/mp3.png"
  1782. alt
  1783. />
  1784. <div style="margin: 5px 0">上传音频</div>
  1785. </div>
  1786. <div
  1787. class="check"
  1788. @click="addTools(42, itemTaskIndex, toolIndex)"
  1789. >
  1790. <img
  1791. src="../../assets/icon/checkNo.png"
  1792. alt
  1793. v-if="itemTool.tool.indexOf(42) == -1"
  1794. />
  1795. <img
  1796. src="../../assets/icon/checkedIs.png"
  1797. alt
  1798. v-else
  1799. />
  1800. </div>
  1801. </div> -->
  1802. </div>
  1803. <div class="toolSort" v-if="itemTool.toolType == 3">
  1804. <div class="tool" :class="{ isToolChoose: itemTool.tool.indexOf(18) != -1 }"
  1805. @click="addTools(18, itemTaskIndex, toolIndex)">
  1806. <div class="whiteBIcon" @click.stop="addTools(18, itemTaskIndex, toolIndex)">
  1807. <img src="../../assets/icon/thirdToolList/trainPlatform.png" alt />
  1808. <div style="margin: 5px 0">训练平台</div>
  1809. </div>
  1810. <div class="noCTool"><img src="../../assets/icon/new/isToolC.png" alt="" /></div>
  1811. <div class="isCTool" v-if="itemTool.tool.indexOf(18) != -1"><img
  1812. src="../../assets/icon/new/isToolC.png" alt="" /></div>
  1813. <!-- <div class="check" @click="addTools(18, itemTaskIndex, toolIndex)">
  1814. <img src="../../assets/icon/checkNo.png" alt
  1815. v-if="itemTool.tool.indexOf(18) == -1" />
  1816. <div class="checkDiv" v-else>
  1817. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  1818. </div>
  1819. </div> -->
  1820. </div>
  1821. <div class="tool" :class="{ isToolChoose: itemTool.tool.indexOf(21) != -1 }"
  1822. @click="addTools(21, itemTaskIndex, toolIndex)">
  1823. <div class="whiteBIcon" @click.stop="addTools(21, itemTaskIndex, toolIndex)">
  1824. <img src="../../assets/icon/fourthToolList/program.png" alt />
  1825. <div style="margin: 5px 0">AIoT Blockly</div>
  1826. </div>
  1827. <div class="noCTool"><img src="../../assets/icon/new/isToolC.png" alt="" /></div>
  1828. <div class="isCTool" v-if="itemTool.tool.indexOf(21) != -1"><img
  1829. src="../../assets/icon/new/isToolC.png" alt="" /></div>
  1830. <!-- <div class="check" @click="addTools(21, itemTaskIndex, toolIndex)">
  1831. <img src="../../assets/icon/checkNo.png" alt
  1832. v-if="itemTool.tool.indexOf(21) == -1" />
  1833. <div class="checkDiv" v-else>
  1834. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  1835. </div>
  1836. </div> -->
  1837. </div>
  1838. <!-- <div class="tool">
  1839. <div class="whiteBIcon" @click="addTools(22, itemTaskIndex, toolIndex)">
  1840. <img src="../../assets/icon/fourthToolList/AIprogram2.png" alt />
  1841. <div style="margin: 5px 0">AI体验</div>
  1842. </div>
  1843. <div class="check" @click="addTools(22, itemTaskIndex, toolIndex)">
  1844. <img src="../../assets/icon/checkNo.png" alt v-if="itemTool.tool.indexOf(22) == -1" />
  1845. <div class="checkDiv" v-else>
  1846. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  1847. </div>
  1848. </div>
  1849. </div> -->
  1850. <div class="tool" :class="{ isToolChoose: itemTool.tool.indexOf(23) != -1 }"
  1851. @click="addTools(23, itemTaskIndex, toolIndex)">
  1852. <div class="whiteBIcon" @click.stop="addTools(23, itemTaskIndex, toolIndex)">
  1853. <img src="../../assets/icon/fourthToolList/Pythonprogram.png" alt />
  1854. <div style="margin: 5px 0">AI Python</div>
  1855. </div>
  1856. <div class="noCTool"><img src="../../assets/icon/new/isToolC.png" alt="" /></div>
  1857. <div class="isCTool" v-if="itemTool.tool.indexOf(23) != -1"><img
  1858. src="../../assets/icon/new/isToolC.png" alt="" /></div>
  1859. <!-- <div class="check" @click="addTools(23, itemTaskIndex, toolIndex)">
  1860. <img src="../../assets/icon/checkNo.png" alt
  1861. v-if="itemTool.tool.indexOf(23) == -1" />
  1862. <div class="checkDiv" v-else>
  1863. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  1864. </div>
  1865. </div> -->
  1866. </div>
  1867. <div class="tool" :class="{ isToolChoose: itemTool.tool.indexOf(24) != -1 }"
  1868. @click="addTools(24, itemTaskIndex, toolIndex)">
  1869. <div class="whiteBIcon" @click.stop="addTools(24, itemTaskIndex, toolIndex)">
  1870. <img src="../../assets/icon/fourthToolList/AIprogram.png" alt />
  1871. <div style="margin: 5px 0">AI Blockly</div>
  1872. </div>
  1873. <div class="noCTool"><img src="../../assets/icon/new/isToolC.png" alt="" /></div>
  1874. <div class="isCTool" v-if="itemTool.tool.indexOf(24) != -1"><img
  1875. src="../../assets/icon/new/isToolC.png" alt="" /></div>
  1876. <!-- <div class="check" @click="addTools(24, itemTaskIndex, toolIndex)">
  1877. <img src="../../assets/icon/checkNo.png" alt
  1878. v-if="itemTool.tool.indexOf(24) == -1" />
  1879. <div class="checkDiv" v-else>
  1880. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  1881. </div>
  1882. </div> -->
  1883. </div>
  1884. <div class="tool" :class="{ isToolChoose: itemTool.tool.indexOf(32) != -1 }"
  1885. @click="addTools(32, itemTaskIndex, toolIndex)">
  1886. <div class="whiteBIcon" @click.stop="addTools(32, itemTaskIndex, toolIndex)">
  1887. <img src="../../assets/icon/thirdToolList/code.png" alt />
  1888. <div style="margin: 5px 0">源码编辑</div>
  1889. </div>
  1890. <div class="noCTool"><img src="../../assets/icon/new/isToolC.png" alt="" /></div>
  1891. <div class="isCTool" v-if="itemTool.tool.indexOf(32) != -1"><img
  1892. src="../../assets/icon/new/isToolC.png" alt="" /></div>
  1893. <!-- <div class="check" @click="addTools(32, itemTaskIndex, toolIndex)">
  1894. <img src="../../assets/icon/checkNo.png" alt
  1895. v-if="itemTool.tool.indexOf(32) == -1" />
  1896. <div class="checkDiv" v-else>
  1897. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  1898. </div>
  1899. </div> -->
  1900. </div>
  1901. <div class="tool" :class="{ isToolChoose: itemTool.tool.indexOf(57) != -1 }"
  1902. @click="addTools(57, itemTaskIndex, toolIndex)">
  1903. <div class="whiteBIcon" @click.stop="openTools(itemTaskIndex, 57, toolIndex)">
  1904. <img src="../../assets/icon/fourthToolList/cocopi.png" alt />
  1905. <div style="margin: 5px 0">CocoPi</div>
  1906. </div>
  1907. <div class="noCTool"><img src="../../assets/icon/new/isToolC.png" alt="" /></div>
  1908. <div class="isCTool" v-if="itemTool.tool.indexOf(57) != -1"><img
  1909. src="../../assets/icon/new/isToolC.png" alt="" /></div>
  1910. <!-- <div class="check" @click="addTools(57, itemTaskIndex, toolIndex)">
  1911. <img src="../../assets/icon/checkNo.png" alt
  1912. v-if="itemTool.tool.indexOf(57) == -1" />
  1913. <div class="checkDiv" v-else>
  1914. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  1915. </div>
  1916. </div> -->
  1917. </div>
  1918. <div class="tool" :class="{ isToolChoose: itemTool.tool.indexOf(63) != -1 }"
  1919. @click="addTools(63, itemTaskIndex, toolIndex)">
  1920. <div class="whiteBIcon" @click.stop="addTools(63, itemTaskIndex, toolIndex)">
  1921. <img src="../../assets/icon/fourthToolList/Wood.png" alt />
  1922. <div style="margin: 5px 0">海龟编程</div>
  1923. </div>
  1924. <div class="noCTool"><img src="../../assets/icon/new/isToolC.png" alt="" /></div>
  1925. <div class="isCTool" v-if="itemTool.tool.indexOf(63) != -1"><img
  1926. src="../../assets/icon/new/isToolC.png" alt="" /></div>
  1927. <!-- <div class="check" @click="addTools(63, itemTaskIndex, toolIndex)">
  1928. <img src="../../assets/icon/checkNo.png" alt
  1929. v-if="itemTool.tool.indexOf(63) == -1" />
  1930. <div class="checkDiv" v-else>
  1931. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  1932. </div>
  1933. </div> -->
  1934. </div>
  1935. </div>
  1936. <div class="toolSort" v-if="itemTool.toolType == 7">
  1937. <div class="tool" :class="{ isToolChoose: itemTool.tool.indexOf(40) != -1 }"
  1938. @click.stop="addTools(40, itemTaskIndex, toolIndex)">
  1939. <div class="whiteBIcon" @click.stop="openTools(itemTaskIndex, 40, toolIndex)">
  1940. <img src="../../assets/icon/thirdToolList/eval.png" alt />
  1941. <div style="margin: 5px 0">个人评价</div>
  1942. </div>
  1943. <div class="noCTool"><img src="../../assets/icon/new/isToolC.png" alt="" /></div>
  1944. <div class="isCTool" v-if="itemTool.tool.indexOf(40) != -1"><img
  1945. src="../../assets/icon/new/isToolC.png" alt="" /></div>
  1946. <!-- <div class="check" @click="addTools(40, itemTaskIndex, toolIndex)">
  1947. <img src="../../assets/icon/checkNo.png" alt
  1948. v-if="itemTool.tool.indexOf(40) == -1" />
  1949. <div class="checkDiv" v-else>
  1950. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  1951. </div>
  1952. </div> -->
  1953. </div>
  1954. </div>
  1955. <div class="toolSort" v-if="itemTool.toolType == 5">
  1956. <div class="tool" :class="{ isToolChoose: itemTool.tool.indexOf(28) != -1 }"
  1957. @click="addTools(28, itemTaskIndex, toolIndex)">
  1958. <div class="whiteBIcon" @click.stop="addTools(28, itemTaskIndex, toolIndex)">
  1959. <img src="../../assets/icon/secondToolList/translation.png" alt />
  1960. <div style="margin: 5px 0">翻译</div>
  1961. </div>
  1962. <div class="noCTool"><img src="../../assets/icon/new/isToolC.png" alt="" /></div>
  1963. <div class="isCTool" v-if="itemTool.tool.indexOf(28) != -1"><img
  1964. src="../../assets/icon/new/isToolC.png" alt="" /></div>
  1965. <!-- <div class="check" @click="addTools(28, itemTaskIndex, toolIndex)">
  1966. <img src="../../assets/icon/checkNo.png" alt
  1967. v-if="itemTool.tool.indexOf(28) == -1" />
  1968. <div class="checkDiv" v-else>
  1969. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  1970. </div>
  1971. </div> -->
  1972. </div>
  1973. <div class="tool" :class="{ isToolChoose: itemTool.tool.indexOf(31) != -1 }"
  1974. @click="addTools(31, itemTaskIndex, toolIndex)">
  1975. <div class="whiteBIcon" @click.stop="addTools(31, itemTaskIndex, toolIndex)">
  1976. <img src="../../assets/icon/secondToolList/networkPanel.png" alt />
  1977. <div style="margin: 5px 0">数字画板</div>
  1978. </div>
  1979. <div class="noCTool"><img src="../../assets/icon/new/isToolC.png" alt="" /></div>
  1980. <div class="isCTool" v-if="itemTool.tool.indexOf(31) != -1"><img
  1981. src="../../assets/icon/new/isToolC.png" alt="" /></div>
  1982. <!-- <div class="check" @click="addTools(31, itemTaskIndex, toolIndex)">
  1983. <img src="../../assets/icon/checkNo.png" alt
  1984. v-if="itemTool.tool.indexOf(31) == -1" />
  1985. <div class="checkDiv" v-else>
  1986. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  1987. </div>
  1988. </div> -->
  1989. </div>
  1990. <div class="tool" :class="{ isToolChoose: itemTool.tool.indexOf(39) != -1 }"
  1991. @click="addTools(39, itemTaskIndex, toolIndex)">
  1992. <div class="whiteBIcon" @click.stop="addTools(39, itemTaskIndex, toolIndex)">
  1993. <img src="../../assets/icon/secondToolList/GeoGebra.png" alt />
  1994. <div style="margin: 5px 0">GeoGebra</div>
  1995. </div>
  1996. <div class="noCTool"><img src="../../assets/icon/new/isToolC.png" alt="" /></div>
  1997. <div class="isCTool" v-if="itemTool.tool.indexOf(39) != -1"><img
  1998. src="../../assets/icon/new/isToolC.png" alt="" /></div>
  1999. <!-- <div class="check" @click="addTools(39, itemTaskIndex, toolIndex)">
  2000. <img src="../../assets/icon/checkNo.png" alt
  2001. v-if="itemTool.tool.indexOf(39) == -1" />
  2002. <div class="checkDiv" v-else>
  2003. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  2004. </div>
  2005. </div> -->
  2006. </div>
  2007. <div class="tool" :class="{ isToolChoose: itemTool.tool.indexOf(66) != -1 }"
  2008. @click="addTools(66, itemTaskIndex, toolIndex)">
  2009. <div class="whiteBIcon" @click.stop="addTools(66, itemTaskIndex, toolIndex)">
  2010. <img src="../../assets/icon/secondToolList/formulaEdi.png" alt />
  2011. <div style="margin: 5px 0">公式编辑</div>
  2012. </div>
  2013. <div class="noCTool"><img src="../../assets/icon/new/isToolC.png" alt="" /></div>
  2014. <div class="isCTool" v-if="itemTool.tool.indexOf(66) != -1"><img
  2015. src="../../assets/icon/new/isToolC.png" alt="" /></div>
  2016. <!-- <div class="check" @click="addTools(66, itemTaskIndex, toolIndex)">
  2017. <img src="../../assets/icon/checkNo.png" alt
  2018. v-if="itemTool.tool.indexOf(66) == -1" />
  2019. <div class="checkDiv" v-else>
  2020. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  2021. </div>
  2022. </div> -->
  2023. </div>
  2024. <!-- <div class="tool">
  2025. <div class="whiteBIcon" @click="addTools(67, itemTaskIndex, toolIndex)">
  2026. <img src="../../assets/icon/secondToolList/molStr.png" alt />
  2027. <div style="margin: 5px 0">分子结构</div>
  2028. </div>
  2029. <div class="check" @click="addTools(67, itemTaskIndex, toolIndex)">
  2030. <img src="../../assets/icon/checkNo.png" alt
  2031. v-if="itemTool.tool.indexOf(67) == -1" />
  2032. <div class="checkDiv" v-else>
  2033. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  2034. </div>
  2035. </div>
  2036. </div> -->
  2037. <div class="tool" :class="{ isToolChoose: itemTool.tool.indexOf(68) != -1 }"
  2038. @click="addTools(68, itemTaskIndex, toolIndex)">
  2039. <div class="whiteBIcon" @click.stop="addTools(68, itemTaskIndex, toolIndex)">
  2040. <img src="../../assets/icon/secondToolList/timeAxis.png" alt />
  2041. <div style="margin: 5px 0">时间轴</div>
  2042. </div>
  2043. <div class="noCTool"><img src="../../assets/icon/new/isToolC.png" alt="" /></div>
  2044. <div class="isCTool" v-if="itemTool.tool.indexOf(68) != -1"><img
  2045. src="../../assets/icon/new/isToolC.png" alt="" /></div>
  2046. <!-- <div class="check" @click="addTools(68, itemTaskIndex, toolIndex)">
  2047. <img src="../../assets/icon/checkNo.png" alt
  2048. v-if="itemTool.tool.indexOf(68) == -1" />
  2049. <div class="checkDiv" v-else>
  2050. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  2051. </div>
  2052. </div> -->
  2053. </div>
  2054. <div class="tool" :class="{ isToolChoose: itemTool.tool.indexOf(69) != -1 }"
  2055. @click="addTools(69, itemTaskIndex, toolIndex)">
  2056. <div class="whiteBIcon" @click.stop="openTools(itemTaskIndex, 69, toolIndex)">
  2057. <img src="../../assets/icon/thirdToolList/english.png" alt />
  2058. <div style="margin: 5px 0">英语写作</div>
  2059. </div>
  2060. <div class="noCTool"><img src="../../assets/icon/new/isToolC.png" alt="" /></div>
  2061. <div class="isCTool" v-if="itemTool.tool.indexOf(69) != -1"><img
  2062. src="../../assets/icon/new/isToolC.png" alt="" /></div>
  2063. <!-- <div class="check" @click="addTools(4, itemTaskIndex, toolIndex)">
  2064. <img src="../../assets/icon/checkNo.png" alt
  2065. v-if="itemTool.tool.indexOf(4) == -1" />
  2066. <div class="checkDiv" v-else>
  2067. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  2068. </div>
  2069. </div> -->
  2070. </div>
  2071. <!-- <div class="tool">
  2072. <div class="whiteBIcon" @click="addTools(28, itemTaskIndex, toolIndex)">
  2073. <img src="../../assets/icon/secondToolList/translation.png" alt />
  2074. <div style="margin: 5px 0">翻译</div>
  2075. </div>
  2076. <div class="check" @click="addTools(28, itemTaskIndex, toolIndex)">
  2077. <img src="../../assets/icon/checkNo.png" alt v-if="itemTool.tool.indexOf(28) == -1" />
  2078. <div class="checkDiv" v-else>
  2079. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  2080. </div>
  2081. </div>
  2082. </div>
  2083. <div class="tool">
  2084. <div class="whiteBIcon" @click="addTools(37, itemTaskIndex, toolIndex)">
  2085. <img src="../../assets/icon/secondToolList/mohe.png" alt />
  2086. <div style="margin: 5px 0">魔盒识字</div>
  2087. </div>
  2088. <div class="check" @click="addTools(37, itemTaskIndex, toolIndex)">
  2089. <img src="../../assets/icon/checkNo.png" alt v-if="itemTool.tool.indexOf(37) == -1" />
  2090. <div class="checkDiv" v-else>
  2091. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  2092. </div>
  2093. </div>
  2094. </div>
  2095. <div class="tool">
  2096. <div class="whiteBIcon" @click="addTools(38, itemTaskIndex, toolIndex)">
  2097. <img src="../../assets/icon/secondToolList/24game.png" alt />
  2098. <div style="margin: 5px 0">24点</div>
  2099. </div>
  2100. <div class="check" @click="addTools(38, itemTaskIndex, toolIndex)">
  2101. <img src="../../assets/icon/checkNo.png" alt v-if="itemTool.tool.indexOf(38) == -1" />
  2102. <div class="checkDiv" v-else>
  2103. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  2104. </div>
  2105. </div>
  2106. </div>
  2107. <div class="tool">
  2108. <div class="whiteBIcon" @click="addTools(31, itemTaskIndex, toolIndex)">
  2109. <img src="../../assets/icon/secondToolList/networkPanel.png" alt />
  2110. <div style="margin: 5px 0">数学画板</div>
  2111. </div>
  2112. <div class="check" @click="addTools(31, itemTaskIndex, toolIndex)">
  2113. <img src="../../assets/icon/checkNo.png" alt v-if="itemTool.tool.indexOf(31) == -1" />
  2114. <div class="checkDiv" v-else>
  2115. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  2116. </div>
  2117. </div>
  2118. </div>
  2119. <div class="tool">
  2120. <div class="whiteBIcon" @click="addTools(39, itemTaskIndex, toolIndex)">
  2121. <img src="../../assets/icon/secondToolList/GeoGebra.png" alt />
  2122. <div style="margin: 5px 0">GeoGebra</div>
  2123. </div>
  2124. <div class="check" @click="addTools(39, itemTaskIndex, toolIndex)">
  2125. <img src="../../assets/icon/checkNo.png" alt v-if="itemTool.tool.indexOf(39) == -1" />
  2126. <div class="checkDiv" v-else>
  2127. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  2128. </div>
  2129. </div>
  2130. </div>
  2131. <div class="tool">
  2132. <div class="whiteBIcon" @click="addTools(58, itemTaskIndex, toolIndex)">
  2133. <img src="../../assets/icon/fourthToolList/car.png" alt />
  2134. <div style="margin: 5px 0">模拟驾驶</div>
  2135. </div>
  2136. <div class="check" @click="addTools(58, itemTaskIndex, toolIndex)">
  2137. <img src="../../assets/icon/checkNo.png" alt v-if="itemTool.tool.indexOf(58) == -1" />
  2138. <div class="checkDiv" v-else>
  2139. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  2140. </div>
  2141. </div>
  2142. </div>
  2143. <div class="tool">
  2144. <div class="whiteBIcon" @click="addTools(59, itemTaskIndex, toolIndex)">
  2145. <img src="../../assets/icon/fourthToolList/lineSearch.png" alt />
  2146. <div style="margin: 5px 0">路径搜索</div>
  2147. </div>
  2148. <div class="check" @click="addTools(59, itemTaskIndex, toolIndex)">
  2149. <img src="../../assets/icon/checkNo.png" alt v-if="itemTool.tool.indexOf(59) == -1" />
  2150. <div class="checkDiv" v-else>
  2151. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  2152. </div>
  2153. </div>
  2154. </div>
  2155. <div class="tool">
  2156. <div class="whiteBIcon" @click="addTools(60, itemTaskIndex, toolIndex)">
  2157. <img src="../../assets/icon/fourthToolList/deepLearning.png" alt />
  2158. <div style="margin: 5px 0">深度学习</div>
  2159. </div>
  2160. <div class="check" @click="addTools(60, itemTaskIndex, toolIndex)">
  2161. <img src="../../assets/icon/checkNo.png" alt v-if="itemTool.tool.indexOf(60) == -1" />
  2162. <div class="checkDiv" v-else>
  2163. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  2164. </div>
  2165. </div>
  2166. </div>
  2167. <div class="tool">
  2168. <div class="whiteBIcon" @click="addTools(61, itemTaskIndex, toolIndex)">
  2169. <img src="../../assets/icon/fourthToolList/allHistory.png" alt />
  2170. <div style="margin: 5px 0">全历史</div>
  2171. </div>
  2172. <div class="check" @click="addTools(61, itemTaskIndex, toolIndex)">
  2173. <img src="../../assets/icon/checkNo.png" alt v-if="itemTool.tool.indexOf(61) == -1" />
  2174. <div class="checkDiv" v-else>
  2175. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  2176. </div>
  2177. </div>
  2178. </div>
  2179. </div>
  2180. <div class="toolSort" v-if="itemTool.toolType == 4">
  2181. <div class="tool">
  2182. <div class="whiteBIcon" @click="addTools(26, itemTaskIndex, toolIndex)">
  2183. <img src="../../assets/icon/thirdToolList/courseDesign.png" alt />
  2184. <div style="margin: 5px 0">课程设计</div>
  2185. </div>
  2186. <div class="check" @click="addTools(26, itemTaskIndex, toolIndex)">
  2187. <img src="../../assets/icon/checkNo.png" alt v-if="itemTool.tool.indexOf(26) == -1" />
  2188. <div class="checkDiv" v-else>
  2189. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  2190. </div>
  2191. </div>
  2192. </div>
  2193. <div class="tool">
  2194. <div class="whiteBIcon" @click="addTools(25, itemTaskIndex, toolIndex)">
  2195. <img src="../../assets/icon/thirdToolList/evalua.png" alt />
  2196. <div style="margin: 5px 0">目标管理</div>
  2197. </div>
  2198. <div class="check" @click="addTools(25, itemTaskIndex, toolIndex)">
  2199. <img src="../../assets/icon/checkNo.png" alt v-if="itemTool.tool.indexOf(25) == -1" />
  2200. <div class="checkDiv" v-else>
  2201. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  2202. </div>
  2203. </div>
  2204. </div> -->
  2205. <!-- <div class="tool">
  2206. <div class="whiteBIcon" @click="addTools(44, itemTaskIndex, toolIndex)">
  2207. <img src="../../assets/icon/thirdToolList/hanClass.png" alt />
  2208. <div style="margin: 5px 0">汉字宫</div>
  2209. </div>
  2210. <div class="check" @click="addTools(44, itemTaskIndex, toolIndex)">
  2211. <img src="../../assets/icon/checkNo.png" alt v-if="itemTool.tool.indexOf(44) == -1" />
  2212. <div class="checkDiv" v-else>
  2213. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  2214. </div>
  2215. </div>
  2216. </div> -->
  2217. </div>
  2218. </div>
  2219. <!-- v-show="!itemTool.isFold3" -->
  2220. <div>
  2221. <textarea rows="2" v-autoHeight="70" type="text" placeholder="添加工具描述" class="binfo_input"
  2222. style="margin: 0 0 20px 0; width: 100% !important"
  2223. v-model="itemTool.toolDetail"></textarea>
  2224. </div>
  2225. </div>
  2226. <!-- <div class="addToolFun2" @click="addToolFun(itemTaskIndex)">
  2227. <div class="addToolImg">
  2228. <img src="../../assets/icon/add.png" alt />
  2229. </div>
  2230. <div>添加工具</div>
  2231. </div> -->
  2232. <button class="c_pub_button_add pub_btn_tool_img" @click="addToolFun(itemTaskIndex)" style="margin: 0 auto;padding: 0 30px;height: 45px;">
  2233. 添加工具
  2234. </button>
  2235. </div>
  2236. </div>
  2237. <div v-else-if="unitJson[unitIndex].easy == 2 ||
  2238. unitJson[unitIndex].easy == 4
  2239. " class="toolChoose" style="padding: 0 0 40px;">
  2240. <div class="tools">
  2241. <div class="leftTools" style="width: 100%"
  2242. v-for="(itemTool, toolIndex) in itemTask.toolChoose" :key="toolIndex">
  2243. <div>
  2244. <textarea rows="3" type="text" placeholder="添加工具描述" class="binfo_input"
  2245. style="margin: 0 0 20px 0; width: 100% !important"
  2246. v-model="itemTool.toolDetail"></textarea>
  2247. </div>
  2248. <div style="
  2249. display: flex;
  2250. flex-direction: row;
  2251. align-items: baseline;
  2252. flex-wrap: nowrap;
  2253. justify-content: flex-start;
  2254. position: relative;
  2255. ">
  2256. <div style="margin-right: 20px; font-weight: bold"
  2257. :id="'gj' + itemTaskIndex + '' + toolIndex">
  2258. 工具 {{ toolIndex + 1 }}
  2259. </div>
  2260. <div class="remove" @click="deleteTool(itemTaskIndex, toolIndex)"
  2261. v-if="itemTask.toolChoose.length > 1" style="right: 0"></div>
  2262. </div>
  2263. <div style="min-height: 163px">
  2264. <div class="toolSort">
  2265. <div class="tool">
  2266. <div class="whiteBIcon" @click="openTools(itemTaskIndex, 1, toolIndex)">
  2267. <img src="../../assets/icon/secondToolList/whiteBoard.png" alt />
  2268. <div style="margin: 5px 0">电子白板</div>
  2269. </div>
  2270. <div class="check" @click="addTools(1, itemTaskIndex, toolIndex)">
  2271. <img src="../../assets/icon/checkNo.png" alt
  2272. v-if="itemTool.tool.indexOf(1) == -1" />
  2273. <div class="checkDiv" v-else>
  2274. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  2275. </div>
  2276. </div>
  2277. </div>
  2278. <div class="tool">
  2279. <div class="whiteBIcon" @click="openTools(itemTaskIndex, 52, toolIndex)">
  2280. <img src="../../assets/icon/fourthToolList/text.png" alt />
  2281. <div style="margin: 5px 0">文档</div>
  2282. </div>
  2283. <div class="check" @click="addTools(52, itemTaskIndex, toolIndex)">
  2284. <img src="../../assets/icon/checkNo.png" alt
  2285. v-if="itemTool.tool.indexOf(52) == -1" />
  2286. <div class="checkDiv" v-else>
  2287. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  2288. </div>
  2289. </div>
  2290. </div>
  2291. <div class="tool">
  2292. <div class="whiteBIcon" @click="openTools(itemTaskIndex, 3, toolIndex)">
  2293. <img src="../../assets/icon/secondToolList/mindMapping.png" alt />
  2294. <div style="margin: 5px 0">思维导图</div>
  2295. </div>
  2296. <div class="check" @click="addTools(3, itemTaskIndex, toolIndex)">
  2297. <img src="../../assets/icon/checkNo.png" alt
  2298. v-if="itemTool.tool.indexOf(3) == -1" />
  2299. <div class="checkDiv" v-else>
  2300. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  2301. </div>
  2302. </div>
  2303. </div>
  2304. <div class="tool">
  2305. <div class="whiteBIcon" @click="openTools(itemTaskIndex, 4, toolIndex)">
  2306. <img src="../../assets/icon/thirdToolList/ask.png" alt />
  2307. <div style="margin: 5px 0">问卷调查</div>
  2308. </div>
  2309. <div class="check" @click="addTools(4, itemTaskIndex, toolIndex)">
  2310. <img src="../../assets/icon/checkNo.png" alt
  2311. v-if="itemTool.tool.indexOf(4) == -1" />
  2312. <div class="checkDiv" v-else>
  2313. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  2314. </div>
  2315. </div>
  2316. </div>
  2317. <div class="tool">
  2318. <div class="whiteBIcon" @click="openTools(itemTaskIndex, 45, toolIndex)">
  2319. <img src="../../assets/icon/thirdToolList/choose.png" alt />
  2320. <div style="margin: 5px 0">选择题</div>
  2321. </div>
  2322. <div class="check" @click="addTools(45, itemTaskIndex, toolIndex)">
  2323. <img src="../../assets/icon/checkNo.png" alt
  2324. v-if="itemTool.tool.indexOf(45) == -1" />
  2325. <div class="checkDiv" v-else>
  2326. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  2327. </div>
  2328. </div>
  2329. </div>
  2330. <div class="tool">
  2331. <div class="whiteBIcon" @click="openTools(itemTaskIndex, 15, toolIndex)">
  2332. <img src="../../assets/icon/thirdToolList/answer.png" alt />
  2333. <div style="margin: 5px 0">问答</div>
  2334. </div>
  2335. <div class="check" @click="addTools(15, itemTaskIndex, toolIndex)">
  2336. <img src="../../assets/icon/checkNo.png" alt
  2337. v-if="itemTool.tool.indexOf(15) == -1" />
  2338. <div class="checkDiv" v-else>
  2339. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  2340. </div>
  2341. </div>
  2342. </div>
  2343. <div class="tool">
  2344. <div class="whiteBIcon" @click="addTools(16, itemTaskIndex, toolIndex)">
  2345. <img src="../../assets/icon/thirdToolList/work.png" alt />
  2346. <div style="margin: 5px 0">作业提交</div>
  2347. </div>
  2348. <div class="check" @click="addTools(16, itemTaskIndex, toolIndex)">
  2349. <img src="../../assets/icon/checkNo.png" alt
  2350. v-if="itemTool.tool.indexOf(16) == -1" />
  2351. <div class="checkDiv" v-else>
  2352. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  2353. </div>
  2354. </div>
  2355. </div>
  2356. <div class="tool">
  2357. <div class="whiteBIcon" @click="openTools(itemTaskIndex, 50, toolIndex)">
  2358. <img src="../../assets/icon/thirdToolList/plwork.png" alt />
  2359. <div style="margin: 5px 0">批量上传</div>
  2360. </div>
  2361. <div class="check" @click="addTools(50, itemTaskIndex, toolIndex)">
  2362. <img src="../../assets/icon/checkNo.png" alt
  2363. v-if="itemTool.tool.indexOf(50) == -1" />
  2364. <div class="checkDiv" v-else>
  2365. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  2366. </div>
  2367. </div>
  2368. </div>
  2369. <div class="tool">
  2370. <div class="whiteBIcon" @click="openTools(itemTaskIndex, 41, toolIndex)">
  2371. <img src="../../assets/icon/thirdToolList/select.png" alt />
  2372. <div style="margin: 5px 0">选择匹配</div>
  2373. </div>
  2374. <div class="check" @click="addTools(41, itemTaskIndex, toolIndex)">
  2375. <img src="../../assets/icon/checkNo.png" alt
  2376. v-if="itemTool.tool.indexOf(41) == -1" />
  2377. <div class="checkDiv" v-else>
  2378. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  2379. </div>
  2380. </div>
  2381. </div>
  2382. <div class="tool">
  2383. <div class="whiteBIcon" @click="openTools(itemTaskIndex, 47, toolIndex)">
  2384. <img src="../../assets/icon/fourthToolList/conSentences.png" alt />
  2385. <div style="margin: 5px 0">排序</div>
  2386. </div>
  2387. <div class="check" @click="addTools(47, itemTaskIndex, toolIndex)">
  2388. <img src="../../assets/icon/checkNo.png" alt
  2389. v-if="itemTool.tool.indexOf(47) == -1" />
  2390. <div class="checkDiv" v-else>
  2391. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  2392. </div>
  2393. </div>
  2394. </div>
  2395. <div class="tool">
  2396. <div class="whiteBIcon" @click="openTools(itemTaskIndex, 48, toolIndex)">
  2397. <img src="../../assets/icon/fourthToolList/table.png" alt />
  2398. <div style="margin: 5px 0">表格</div>
  2399. </div>
  2400. <div class="check" @click="addTools(48, itemTaskIndex, toolIndex)">
  2401. <img src="../../assets/icon/checkNo.png" alt
  2402. v-if="itemTool.tool.indexOf(48) == -1" />
  2403. <div class="checkDiv" v-else>
  2404. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  2405. </div>
  2406. </div>
  2407. </div>
  2408. </div>
  2409. </div>
  2410. </div>
  2411. <!-- <div class="addToolFun" style="margin-bottom: 20px" @click="addToolFun(itemTaskIndex)">
  2412. <div class="addToolImg">
  2413. <img src="../../assets/icon/add.png" alt />
  2414. </div>
  2415. <div>添加工具</div>
  2416. </div> -->
  2417. <button class="c_pub_button_add pub_btn_tool_img" @click="addToolFun(itemTaskIndex)" style="margin: 35px auto 20px">
  2418. 添加工具
  2419. </button>
  2420. </div>
  2421. </div>
  2422. <div v-else-if="unitJson[unitIndex].easy == 1 ||
  2423. (unitJson[unitIndex].easy == 5 && itemTask.taskType == 2)
  2424. " class="toolChoose" style="padding: 0 0 40px;">
  2425. <div class="tools">
  2426. <div class="leftTools" style="
  2427. width: 100%;
  2428. padding: 0 0 15px 0;
  2429. " v-for="(itemTool, toolIndex) in itemTask.toolChoose" :key="toolIndex">
  2430. <div style="min-height: 163px">
  2431. <div class="toolSort">
  2432. <div class="tool">
  2433. <div class="whiteBIcon" @click="openTools(itemTaskIndex, 50, toolIndex)">
  2434. <img src="../../assets/icon/thirdToolList/plwork.png" alt />
  2435. <div style="margin: 5px 0">批量上传</div>
  2436. </div>
  2437. <div class="check" @click="addTools(50, itemTaskIndex, toolIndex)">
  2438. <img src="../../assets/icon/checkNo.png" alt
  2439. v-if="itemTool.tool.indexOf(50) == -1" />
  2440. <div class="checkDiv" v-else>
  2441. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  2442. </div>
  2443. </div>
  2444. </div>
  2445. </div>
  2446. </div>
  2447. </div>
  2448. </div>
  2449. </div>
  2450. <div class="elist_css" v-if="!(unitJson[unitJson.length - 1].easy == 4)">
  2451. <div class="elist_title">
  2452. <div style="
  2453. display: flex;
  2454. flex-direction: row;
  2455. align-items: center;
  2456. margin: 20px 0;
  2457. ">
  2458. <div class="lineTitle clineTitle">评价设置</div>
  2459. <!-- <div class="line" style="width: 90%"></div> -->
  2460. </div>
  2461. </div>
  2462. <div class="mbCss">
  2463. <div class="pjCss" :style="{width:itemTask.isEvaFold?'calc(100% - 55%)':'calc(100% - 120px)'}">
  2464. <div v-if="itemTask.eList && itemTask.eList.length" class="elist_input">
  2465. <div v-for="(eItem, eIndex) in itemTask.eList" :key="eIndex" class="elist_input_box">
  2466. <span>评价名称:</span>
  2467. <el-tooltip effect="dark" :content="itemTask.eList[eIndex].value || '填写评价名称'" placement="top" popper-class="text_tooltip2">
  2468. <input type="input" v-model="itemTask.eList[eIndex].value" placeholder="填写评价名称" />
  2469. </el-tooltip>
  2470. <span>评星等级:</span>
  2471. <el-rate v-model="itemTask.eList[eIndex].score" @change="setEListStar()"
  2472. disabled></el-rate>
  2473. <div class="remove" @click="
  2474. deletEList(unitIndex, itemTaskIndex, eIndex)
  2475. "></div>
  2476. <div class="elist_inptu_text">
  2477. <span>评价描述:</span>
  2478. <el-tooltip effect="dark" :content="itemTask.eList[eIndex].detail || '填写评价描述'" placement="top" popper-class="text_tooltip2">
  2479. <input type="input" v-model="itemTask.eList[eIndex].detail" placeholder="填写评价描述" />
  2480. </el-tooltip>
  2481. </div>
  2482. <div class="elist_inptu_text" v-if="evalua">
  2483. <span>目标:</span>
  2484. <!-- <input type="input" v-model="itemTask.eList[eIndex].target" placeholder="填写评价描述" /> -->
  2485. <!-- <el-select v-model="itemTask.eList[eIndex].target" placeholder="请选择目标"
  2486. @change="forceUpdate()">
  2487. <el-option v-for="(e, eIndex) in targetArray" :key="eIndex" :label="e.name"
  2488. :value="e.name">
  2489. </el-option>
  2490. </el-select> -->
  2491. <el-cascader :options="targetArray" v-model="itemTask.eList[eIndex].target"
  2492. :props="{ checkStrictly: true }" :show-all-levels="false" clearable></el-cascader>
  2493. </div>
  2494. </div>
  2495. </div>
  2496. <!-- <div class="addToolFun" @click="addEList(unitIndex, itemTaskIndex)"
  2497. style="margin: 35px 35px 0 0">
  2498. <div class="addToolImg">
  2499. <img src="../../assets/icon/add.png" alt />
  2500. </div>
  2501. <div>添加</div>
  2502. </div> -->
  2503. <button class="c_pub_button_add pub_btn_eval_img" @click="addEList(unitIndex, itemTaskIndex)" style="margin: 20px 35px 0 0">
  2504. 添加
  2505. </button>
  2506. </div>
  2507. <div v-if="evalua" style="
  2508. border: 1px solid #e5e5e5;
  2509. box-shadow: 3px 1px 15px 3px #e0e0e0;
  2510. " :style="{width:itemTask.isEvaFold?'55%':'116px'}" class="evaCss">
  2511. <!-- <div class="e_add_top">
  2512. <div class="e_add_title">
  2513. <span>当前使用目标管理</span>
  2514. <span>{{ eTitle }}</span>
  2515. <img src="../../assets/line.png" class="cru_line" style="
  2516. width: 125px;
  2517. height: 20px;
  2518. bottom: -10px;
  2519. left: 155px;
  2520. " />
  2521. </div>
  2522. </div> -->
  2523. <div class="e_add_content" style="width: 100%">
  2524. <div class="e_add_list_pbox" style="width: 100%">
  2525. <div class="e_add_list_pbox_title">
  2526. <span class="type_title" v-if="itemTask.isEvaFold">切换模式</span>
  2527. <div class="type_content" v-if="itemTask.isEvaFold">
  2528. <span :class="{ active: typeMode == 1 }" @click="OtherMb(1, itemTaskIndex)">目标树</span>
  2529. <span :class="{ active: typeMode == 2 }" @click="OtherMb(2, itemTaskIndex)">目标罗盘</span>
  2530. <!-- <span :class="{ active: typeMode == 3 }" @click="OtherMb(3)">目标看板</span> -->
  2531. </div>
  2532. <div v-if="itemTask.isEvaFold"
  2533. class="show_taskD show" style="margin:0 0 0 auto" @click="foldEva(itemTaskIndex)"><img
  2534. src="../../assets/icon/new/icon-slide.png" />收起目标</div>
  2535. <div v-else style="margin:0 0 0 auto" class="show_taskD"
  2536. @click="foldEva(itemTaskIndex)"><img src="../../assets/icon/new/icon-slide.png" />展开目标
  2537. </div>
  2538. </div>
  2539. <div class="e_add_list_pbox_content" v-if="itemTask.isEvaFold" style="min-height: 200px;">
  2540. <Mind :showBar="false" :mindData="data" style="width: 100%" :jsmindId="unitIndex + '-' + itemTaskIndex + 'mind'
  2541. " v-if="typeMode == 1"></Mind>
  2542. <Sunburst :Josn="eJson" :num="eJSONNum" style="width: 100%" v-if="typeMode == 2">
  2543. </Sunburst>
  2544. <SeeBoard :Josn="eJson" :num="eJSONNum" :ename="eTitle" style="width: 100%"
  2545. v-if="typeMode == 3"></SeeBoard>
  2546. </div>
  2547. </div>
  2548. </div>
  2549. </div>
  2550. </div>
  2551. </div>
  2552. <div class="funBlock" style="padding: 0">
  2553. <div class="fold" @click="fold(itemTaskIndex, $event)">
  2554. <div class="arrow" :class="{ arrowZ: !(itemTask.isFold === 1) }">
  2555. </div>
  2556. <div>{{ itemTask.isFold === 1 ? '展开任务' : '收起任务' }}</div>
  2557. </div>
  2558. <!-- <div class="fold" @click="fold(itemTaskIndex, $event, 0)">
  2559. <div>展开</div>
  2560. <div class="arrow">
  2561. <img src="../../assets/icon/expand.png" alt />
  2562. </div>
  2563. </div> -->
  2564. </div>
  2565. </div>
  2566. </div>
  2567. <div class="addTaskBorder" v-if="!unitJson[unitIndex].easy">
  2568. <!-- <div>
  2569. <img src="../../../assets/icon/new/addStage.png" alt />
  2570. <span>添加任务</span>
  2571. </div> -->
  2572. <button class="c_pub_button_confirm pub_btn_add_task_img" @click="addTaskBorder">
  2573. 添加任务
  2574. </button>
  2575. </div>
  2576. </div>
  2577. <div class="info_btnBox3">
  2578. <button class="c_pub_button_return pub_btn_return_img" v-if="steps == 1" @click="
  2579. goTo(
  2580. '/course?userid=' +
  2581. userid +
  2582. '&oid=' +
  2583. oid +
  2584. '&org=' +
  2585. org +
  2586. '&role=' +
  2587. role
  2588. )
  2589. ">
  2590. 返回课程
  2591. </button>
  2592. <button class="c_pub_button_return pub_btn_last_img" v-if="steps > 1 && steps != 5" @click="lastSteps"
  2593. style="background:#dbdbdb">
  2594. {{ steps == 4 ? "返回课程" : "上一步" }}
  2595. </button>
  2596. <button class="c_pub_button_confirm" v-if="steps < 4" @click="nextSteps"
  2597. :class="{ pub_btn_next_img: steps != 3, pub_btn_finish_img: steps == 3 }">
  2598. {{ steps == 3 ? "确认上传" : "下一步" }}
  2599. </button>
  2600. </div>
  2601. </div>
  2602. </div>
  2603. </div>
  2604. </div>
  2605. <div style="
  2606. width: calc(100% - 20px);
  2607. background: rgb(255, 255, 255);
  2608. border-radius: 10px;
  2609. " v-if="this.steps == 4">
  2610. <div class="basic_box_success">
  2611. <div class="right_img">
  2612. <img src="../../assets/icon/right.png" alt />
  2613. </div>
  2614. <div style="font-weight: bold">成功</div>
  2615. <!-- <div>您的课程编号</div>
  2616. <div class="number">{{ number }}</div>-->
  2617. <!-- <div class="success_button">
  2618. <div class="look_course" @click="isNoFinsh">
  2619. 邀请老师协同编辑
  2620. </div>
  2621. <div class="attend_others" @click="goCourse">预览课程</div>
  2622. </div> -->
  2623. </div>
  2624. </div>
  2625. <div :class="{ info_btnBox: isBtnDisplay, info_btnBox2: !isBtnDisplay }" @mouseenter="btnDisplay(true)"
  2626. @mouseleave="btnDisplay(false)" v-if="false">
  2627. <button class="c_pub_button_return pub_btn_return_img" v-if="steps == 1 && isBtnDisplay" @click="
  2628. goTo(
  2629. '/course?userid=' +
  2630. userid +
  2631. '&oid=' +
  2632. oid +
  2633. '&org=' +
  2634. org +
  2635. '&role=' +
  2636. role
  2637. )
  2638. ">
  2639. 返回课程
  2640. </button>
  2641. <button class="c_pub_button_return pub_btn_last_img" v-if="steps > 1 && steps != 5 && isBtnDisplay"
  2642. @click="lastSteps">
  2643. {{ steps == 4 ? "返回课程" : "上一步" }}
  2644. </button>
  2645. <button class="c_pub_button_confirm" v-if="steps < 4 && isBtnDisplay" @click="nextSteps"
  2646. :class="{ pub_btn_next_img: steps != 3, pub_btn_finish_img: steps == 3 }">
  2647. {{ steps == 3 ? "确认上传" : "下一步" }}
  2648. </button>
  2649. </div>
  2650. </div>
  2651. </div>
  2652. </div>
  2653. <el-dialog title="提示" :visible.sync="dialogVisible" :append-to-body="true" width="25%" :before-close="handleClose"
  2654. class="dialog_diy2 customWidth">
  2655. <div>请复制该链接邀请协同编辑</div>
  2656. <div>http://www.boomyon.com/index-zhang.com</div>
  2657. <span slot="footer" class="dialog-footer">
  2658. <el-button type="primary">复制链接分享</el-button>
  2659. <el-button @click="dialogVisible = false">取消</el-button>
  2660. </span>
  2661. </el-dialog>
  2662. <el-dialog :title="updateBoolean2 ? '查看文档' : '添加文档'" :visible.sync="dialogVisible1" :append-to-body="true" width="25%"
  2663. :before-close="handleClose" class="dialog_diy2 customWidth">
  2664. <el-form>
  2665. <el-form-item label="文档标题">
  2666. <el-input v-model="tTitle" auto-complete="off" placeholder="请输入文档标题名..."></el-input>
  2667. </el-form-item>
  2668. <div>文档简介</div>
  2669. <editor-bar v-model="tdetail" @change="change"></editor-bar>
  2670. </el-form>
  2671. <span slot="footer" class="dialog-footer">
  2672. <el-button @click="dialogVisible1 = false">取 消</el-button>
  2673. <el-button type="primary" @click="addWord" v-if="!updateBoolean2">添加</el-button>
  2674. <el-button type="primary" @click="upWord" v-else>修 改</el-button>
  2675. </span>
  2676. </el-dialog>
  2677. <el-dialog title="添加文档" :visible.sync="dialogVisible2" :append-to-body="true" width="500px"
  2678. :before-close="handleClose" class="dialog_diy">
  2679. <el-form>
  2680. <el-form-item label="文档标题">
  2681. <el-input v-model="templateC.title" auto-complete="off" placeholder="请输入文档标题名..."></el-input>
  2682. </el-form-item>
  2683. <div>文档内容</div>
  2684. <editor-bar v-model="cTemplate" @change="change"></editor-bar>
  2685. </el-form>
  2686. <span slot="footer" class="dialog-footer">
  2687. <el-button @click="clearChoose">取 消</el-button>
  2688. <el-button type="primary" @click="wordNext()">确定</el-button>
  2689. </span>
  2690. </el-dialog>
  2691. <el-dialog title="添加富文本" :visible.sync="dialogVisible6" :append-to-body="true" width="500px"
  2692. :before-close="handleClose" class="dialog_diy">
  2693. <el-form>
  2694. <el-form-item label="文本标题">
  2695. <el-input ref="fuInput" v-model="AttText.title" auto-complete="off" @input="change2"
  2696. placeholder="请输入文本标题..."></el-input>
  2697. </el-form-item>
  2698. <!-- <div>富文本内容</div> -->
  2699. <editor-bar v-model="AttText.text" @change="change" v-if="dialogVisible6"></editor-bar>
  2700. </el-form>
  2701. <span slot="footer" class="dialog-footer">
  2702. <el-button @click="clearAttText">取 消</el-button>
  2703. <el-button type="primary" @click="isAddOrUpdateAttText">确定</el-button>
  2704. </span>
  2705. </el-dialog>
  2706. <el-dialog title="添加链接" :visible.sync="dialogVisible7" :append-to-body="true" width="500px"
  2707. :before-close="handleClose" class="dialog_diy lineCss">
  2708. <el-form>
  2709. <el-form-item label="标题" :label-width="formLabelWidth">
  2710. <span>
  2711. <el-input placeholder="请输入链接标题" clearable v-model="lineTitle" class="add_input"></el-input>
  2712. </span>
  2713. </el-form-item>
  2714. <el-form-item label="链接" :label-width="formLabelWidth">
  2715. <span>
  2716. <el-input placeholder="请输入链接" clearable v-model="line" class="add_input"></el-input>
  2717. </span>
  2718. </el-form-item>
  2719. </el-form>
  2720. <span slot="footer" class="dialog-footer">
  2721. <el-button @click="clearLine">取 消</el-button>
  2722. <el-button type="primary" @click="isAddOrUpdateLine">确定</el-button>
  2723. </span>
  2724. </el-dialog>
  2725. <el-dialog :title="updateSourcePan ? '修改资源' : '添加资源'" :visible.sync="dialogVisibleSource" :append-to-body="true"
  2726. width="100%" :before-close="handleClose" class="dialog_diy source_diy">
  2727. <div>
  2728. <sourceDialog :sourceData.sync="sourceData" :updateSourcePan="updateSourcePan"></sourceDialog>
  2729. </div>
  2730. <span slot="footer" class="dialog-footer">
  2731. <el-button @click="dialogVisibleSource = false">取 消</el-button>
  2732. <el-button type="primary" @click="addSource" v-if="!updateSourcePan">确定</el-button>
  2733. <el-button type="primary" @click="updateSource" v-else>确定</el-button>
  2734. </span>
  2735. </el-dialog>
  2736. <el-dialog title="添加课程成员" :visible.sync="dialogVisible3" :append-to-body="true" width="25%" height="80%"
  2737. :before-close="handleClose" class="addNewPP customWidth">
  2738. <div class="people">
  2739. <div class="people_top">
  2740. <div class="people_nav">选择成员</div>
  2741. <div class="people_top_right">
  2742. <div class="people_search">
  2743. <el-input style="height: 100%" placeholder="搜索成员名称" v-model="searchPeople"></el-input>
  2744. <div class="search_img" @click="searchStudent">
  2745. <img src="../../assets/icon/search.png" alt />
  2746. </div>
  2747. </div>
  2748. </div>
  2749. </div>
  2750. <el-checkbox-group v-model="checkboxList" class="people_name">
  2751. <el-checkbox v-for="item in studentJuri" :key="item.userid" :label="item.userid">{{ item.name ? item.name :
  2752. "暂无学生可选" }}</el-checkbox>
  2753. </el-checkbox-group>
  2754. </div>
  2755. <span slot="footer" class="dialog-footer">
  2756. <el-button @click="dialogVisible3 = false">取 消</el-button>
  2757. <el-button type="primary" @click="isAddPP">确定</el-button>
  2758. </span>
  2759. </el-dialog>
  2760. <el-dialog title="选择授课班级" :visible.sync="dialogVisibleClass" :append-to-body="true" width="600px" height="80%"
  2761. :before-close="handleClose" class="addNewPP2">
  2762. <div class="check_classBox">
  2763. <div class="check_class_right">
  2764. <div class="check_class" :class="{ activeX: gradeId == '' }" @click="gradeId = '', getClass()">
  2765. 全部
  2766. </div>
  2767. <el-tooltip placement="top" :content="item.name" v-for="(item, index) in gradeList" :key="index">
  2768. <div class="check_class" :class="{ activeX: gradeId == item.id }" @click="gradeId = item.id, getClass()">
  2769. {{ item.name }}
  2770. </div>
  2771. </el-tooltip>
  2772. </div>
  2773. <div class="check_class_left">
  2774. <div class="check_class_all_box">
  2775. <div class="check_class_left_title">选择班级</div>
  2776. <div style="display:flex;align-items:center;margin-left:auto;"><el-checkbox v-model="checkAll"
  2777. @change="handleCheckAllChange" class="all_check">全选</el-checkbox></div>
  2778. </div>
  2779. <!-- <div class="class_item" style="position:absolute; margin:0" v-if="grade2.length">
  2780. <el-checkbox v-model="checkAll" @change="handleCheckAllChange">全选</el-checkbox>
  2781. </div> -->
  2782. <el-checkbox-group v-model="checkboxList2" class="check_class_item" @change="InviteChange" v-if="grade2.length">
  2783. <div v-for="item in grade2" :key="item.id" class="class_item">
  2784. <el-checkbox :label="item.id">
  2785. {{ item.name }}
  2786. </el-checkbox>
  2787. </div>
  2788. </el-checkbox-group>
  2789. <div v-if="!grade2.length">暂无数据</div>
  2790. </div>
  2791. </div>
  2792. <span slot="footer" class="dialog-footer">
  2793. <el-button @click="dialogVisibleClass = false">取 消</el-button>
  2794. <el-button type="primary" @click="isAddClass">确定</el-button>
  2795. </span>
  2796. </el-dialog>
  2797. <el-dialog title="添加协同成员" :visible.sync="dialogVisibleMember" :append-to-body="true" width="25%" height="80%"
  2798. :before-close="handleClose" class="addNewPP customWidth">
  2799. <div class="people">
  2800. <div class="people_top">
  2801. <div class="people_top_right">
  2802. <div class="people_search">
  2803. <el-input placeholder="搜索成员名称" v-model="searchTN" @keyup.enter.native="getTeacher"></el-input>
  2804. <div class="search_img" @click="getTeacher">
  2805. <img src="../../assets/icon/search.png" alt />
  2806. </div>
  2807. </div>
  2808. </div>
  2809. <div class="people_nav">选择成员</div>
  2810. </div>
  2811. <el-checkbox-group v-model="checkboxList3" class="people_name" v-if="teacherJuri.length">
  2812. <el-checkbox v-for="item in teacherJuri" :key="item.userid" :label="item.userid">
  2813. <div class="t_j_box">
  2814. <el-tooltip placement="top" :content="item.name ? item.name : '暂无姓名'">
  2815. <span>{{ item.name ? item.name : "暂无姓名" }}</span>
  2816. </el-tooltip>
  2817. <el-tooltip placement="top" :content="item.username">
  2818. <span>{{ item.username }}</span>
  2819. </el-tooltip>
  2820. <el-tooltip placement="top" :content="item.school">
  2821. <span>{{ item.school }}</span>
  2822. </el-tooltip>
  2823. </div>
  2824. </el-checkbox>
  2825. </el-checkbox-group>
  2826. <div style="text-align: center; margin-top: 10px" v-else>暂无数据</div>
  2827. </div>
  2828. <span slot="footer" class="dialog-footer">
  2829. <el-button @click="dialogVisibleMember = false">取 消</el-button>
  2830. <el-button type="primary" @click="isAddPPTeacher">确定</el-button>
  2831. </span>
  2832. </el-dialog>
  2833. <el-dialog title="创建问卷" :visible.sync="dialogVisible5" :append-to-body="true" width="800px"
  2834. :before-close="(done) => { closePan(4) }" class="dialog_diy fullStyle">
  2835. <div style="height:100%">
  2836. <div class="a_add_title" style="
  2837. display: flex;
  2838. flex-direction: row;
  2839. align-items: center;
  2840. justify-content: center;
  2841. ">
  2842. <!-- <div style="margin-right: 20px; font-size: 20px">标题:</div> -->
  2843. <el-input v-model="askJson.askTitle" placeholder="请输入标题" style="width: 400px"></el-input>
  2844. </div>
  2845. <div class="a_addBox" style="height:calc(100% - 50px)">
  2846. <!-- <div style="font-size: 16px; color: #c7c7c7">请输入题目内容</div> -->
  2847. <div class="a_add_box" v-for="(item1, index1) in askJson.askCount" :key="index1">
  2848. <div class="a_add_checkType">
  2849. <span :class="{
  2850. active:
  2851. askJson.askJson[index1].type == '1' ||
  2852. !askJson.askJson[index1].type,
  2853. }" @click="checkAskType('1', askJson.askJson[index1])">单选题</span>
  2854. <span :class="{ active: askJson.askJson[index1].type == '2' }"
  2855. @click="checkAskType('2', askJson.askJson[index1])">多选题</span>
  2856. </div>
  2857. <div class="a_add_head">
  2858. <div style="display: flex;align-items: center;width: 100%;margin-right: 20px;">
  2859. <span style="min-width:fit-content">{{ index1 + 1 + "、" }}</span>
  2860. <textarea class="a_add_head_input textarea_css" v-autoHeight="40" v-model="askJson.askJson[index1].askstitle
  2861. " placeholder="请输入题目" @change="() => { $forceUpdate() }"></textarea>
  2862. </div>
  2863. <div class="moveBtn moveBtn2" style="margin: 0 20px 0 0px;" v-if="askJson.askCount != 1">
  2864. <div class="chapter_upload_up" @click.stop="askMove(1, index1)">
  2865. </div>
  2866. <div class="chapter_upload_down" @click.stop="askMove(2, index1)"></div>
  2867. </div>
  2868. <div class="a_add_head_div">
  2869. <el-button type="primary" size="small" @click="deleteAskList(index1)" v-if="askJson.askCount != 1">删除
  2870. </el-button>
  2871. <el-button type="primary" size="small" @click="addAskList(index1)">添加</el-button>
  2872. </div>
  2873. </div>
  2874. <div class="a_add_body">
  2875. <div class="a_add_input" style="flex-direction: column;">
  2876. <div v-for="(item2, checkIndex) in askJson.askJson[index1].askItem" :key="checkIndex"
  2877. style=" margin: 20px 10px 0 0;display: flex;align-items:center;position: relative;">
  2878. <div style="margin-right: 10px">
  2879. 选项{{ checkIndex + 1 }}
  2880. </div>
  2881. <textarea class="a_add_head_input textarea_css" v-autoHeight="40" v-model="askJson.askJson[index1].checkList[checkIndex]
  2882. " placeholder="请输入选项" style="width: 300px;" @change="() => { $forceUpdate() }"></textarea>
  2883. <div class="moveBtn moveBtn2" style="margin: 0 0px 0 20px" v-if="askJson.askJson[index1].askItem != 1">
  2884. <div class="chapter_upload_up" @click.stop="checkMove(1, index1, checkIndex)">
  2885. </div>
  2886. <div class="chapter_upload_down" @click.stop="checkMove(2, index1, checkIndex)"></div>
  2887. </div>
  2888. <div class="a_add_body_div">
  2889. <el-button type="primary" size="small"
  2890. @click="addcheckList(askJson.askJson[index1], checkIndex)">添加</el-button>
  2891. <el-button type="primary" size="small" @click="deletecheckList(askJson.askJson[index1], checkIndex)"
  2892. v-if="askJson.askJson[index1].askItem != 1">删除
  2893. </el-button>
  2894. </div>
  2895. </div>
  2896. </div>
  2897. <!-- <div class="a_add_body_div">
  2898. <el-button style="margin: 10px 0px 0 0" type="primary" size="small"
  2899. @click="addcheckList(askJson.askJson[index1])">添加</el-button>
  2900. <el-button type="primary" size="small" style="margin: 10px 0 0 10px"
  2901. @click="deletecheckList(askJson.askJson[index1])" v-if="askJson.askJson[index1].askItem != 1">删除
  2902. </el-button>
  2903. </div> -->
  2904. </div>
  2905. </div>
  2906. </div>
  2907. </div>
  2908. <span slot="footer" class="dialog-footer">
  2909. <el-button @click="closePan(4)">取 消</el-button>
  2910. <el-button type="primary" @click="addAsk">确 定</el-button>
  2911. </span>
  2912. </el-dialog>
  2913. <el-dialog title="创建选择题" :visible.sync="dialogVisibleChoice" :append-to-body="true" width="800px"
  2914. :before-close="(done) => { closePan(45) }" class="dialog_diy fullStyle">
  2915. <div style="height:100%">
  2916. <!-- <div class="a_add_title" style="
  2917. display: flex;
  2918. flex-direction: row;
  2919. align-items: center;
  2920. justify-content: center;
  2921. ">
  2922. <div style="margin-right: 20px; font-size: 20px">标题:</div>
  2923. <el-input v-model="testJson.testTitle" placeholder="请输入标题" style="width: 400px"></el-input>
  2924. </div> -->
  2925. <div class="a_addBox" style="height:100%">
  2926. <div style="font-size: 16px; color: #c7c7c7;display: flex;align-items: center;">
  2927. <!-- 请输入题目内容 -->
  2928. <button class="c_pub_button_add pub_btn_paste_img" @click="pasteOption" style="margin-left: 10px"
  2929. v-if="isPasteChoice">智能粘贴</button>
  2930. </div>
  2931. <div class="a_add_box" v-for="(item1, index1) in testJson.testCount" :key="index1">
  2932. <div class="a_add_checkType">
  2933. <span :class="{ active: testJson.testJson[index1].type == '1' }"
  2934. @click="checkTestType('1', testJson.testJson[index1])">单选题</span>
  2935. <span :class="{ active: testJson.testJson[index1].type == '2' }"
  2936. @click="checkTestType('2', testJson.testJson[index1])">多选题</span>
  2937. </div>
  2938. <div class="a_add_head">
  2939. <div class="timuUpImg">
  2940. <div style="display: flex;align-items: center;">
  2941. <span style="min-width:fit-content">{{ index1 + 1 + "、" }}</span>
  2942. <!-- <el-input class="a_add_head_input" v-autoHeight="40" resize="none" v-model="testJson.testJson[index1].teststitle" type="textarea"
  2943. placeholder="请输入题目">
  2944. </el-input> -->
  2945. <textarea class="a_add_head_input textarea_css" v-autoHeight="40"
  2946. v-model="testJson.testJson[index1].teststitle" placeholder="请输入题目"
  2947. @change="() => { $forceUpdate() }"></textarea>
  2948. </div>
  2949. <div class="moveBtn moveBtn2" v-if="testJson.testCount != 1">
  2950. <div class="chapter_upload_up" @click.stop="testMove(1, index1)">
  2951. </div>
  2952. <div class="chapter_upload_down" @click.stop="testMove(2, index1)"></div>
  2953. </div>
  2954. <div class="xzUpImg" @click.stop="addImg($event)" style="margin-right: 10px;">
  2955. <img src="../../assets/icon/xzUpImg.png" alt="" />
  2956. <input type="file" accept="image/*" style="display: none" @change="beforeUploadTiMu($event, index1)" />
  2957. </div>
  2958. </div>
  2959. <div class="a_add_head_div">
  2960. <el-button type="primary" size="small" @click="deleteTestList(index1)" v-if="testJson.testCount != 1">删除
  2961. </el-button>
  2962. <el-button type="primary" size="small" @click="addTestList(index1)">添加</el-button>
  2963. </div>
  2964. </div>
  2965. <div class="timuImgBox" v-if="testJson.testJson[index1].timuList &&
  2966. testJson.testJson[index1].timuList.length
  2967. ">
  2968. <div v-for="(timg, tIndex) in testJson.testJson[index1].timuList" :key="tIndex" class="timuImg"
  2969. @click.stop="previewImg(timg.src)">
  2970. <img :src="timg.src" alt="" />
  2971. <div class="deleteWord" @click.stop="deleteM(index1, tIndex)">
  2972. <img src="../../assets/icon/delete.png" alt="" />
  2973. </div>
  2974. </div>
  2975. </div>
  2976. <div class="a_add_body">
  2977. <div class="a_add_input a_add_input_choice">
  2978. <el-radio-group v-model="testJson.testJson[index1].answer" v-if="testJson.testJson[index1].type == 1"
  2979. @change="() => { $forceUpdate() }">
  2980. <div class="radioBox">
  2981. <el-radio v-for="(item2, checkIndex) in testJson.testJson[index1]
  2982. .testItem" :key="checkIndex" :label="checkIndex">
  2983. <div style="margin-right: 10px">
  2984. 选项{{ checkIndex + 1 }}
  2985. </div>
  2986. <div style="margin-right: 10px; width: 300px" v-if="testJson.testJson[index1].checkList[checkIndex] &&
  2987. testJson.testJson[index1].checkList[checkIndex]
  2988. .imgType &&
  2989. testJson.testJson[index1].checkList[checkIndex]
  2990. .imgType == 1
  2991. ">
  2992. <div class="inImg" @click.stop="
  2993. previewImg(
  2994. testJson.testJson[index1].checkList[checkIndex]
  2995. .src
  2996. )
  2997. ">
  2998. <el-image :src="testJson.testJson[index1].checkList[checkIndex]
  2999. .src
  3000. " lazy />
  3001. <!-- <img :src="
  3002. testJson.testJson[index1].checkList[checkIndex]
  3003. .src
  3004. " alt="" /> -->
  3005. </div>
  3006. </div>
  3007. <textarea class="a_add_head_input textarea_css" v-autoHeight="40" v-else v-model="testJson.testJson[index1].checkList[checkIndex]
  3008. " placeholder="请输入选项" style="width: 300px; margin-right: 10px"
  3009. @change="() => { $forceUpdate() }"></textarea>
  3010. <div class="xzUpImg" @click.stop="addImg($event)">
  3011. <img src="../../assets/icon/xzUpImg.png" alt="" />
  3012. <input type="file" accept="image/*" style="display: none"
  3013. @change="beforeUploadTi($event, index1, checkIndex)" />
  3014. </div>
  3015. <div class="moveBtn moveBtn2" v-if="testJson.testJson[index1].testItem != 1">
  3016. <div class="chapter_upload_up" @click.stop="tcheckMove(1, index1, checkIndex)">
  3017. </div>
  3018. <div class="chapter_upload_down" @click.stop="tcheckMove(2, index1, checkIndex)"></div>
  3019. </div>
  3020. <div class="a_add_body_div">
  3021. <el-button type="primary" size="small"
  3022. @click.stop="addTcheckList(testJson.testJson[index1], checkIndex)">添加</el-button>
  3023. <el-button type="primary" size="small"
  3024. @click.stop="deleteTcheckList(testJson.testJson[index1], checkIndex)"
  3025. v-if="testJson.testJson[index1].testItem != 1">删除
  3026. </el-button>
  3027. </div>
  3028. </el-radio>
  3029. </div>
  3030. </el-radio-group>
  3031. <el-checkbox-group v-model="testJson.testJson[index1].answer" v-if="testJson.testJson[index1].type == '2'"
  3032. @change="() => { $forceUpdate() }">
  3033. <div class="radioBox">
  3034. <el-checkbox v-for="(item2, checkIndex1) in testJson.testJson[index1]
  3035. .testItem" :key="checkIndex1" :label="checkIndex1">
  3036. <div style="margin-right: 10px">
  3037. 选项{{ checkIndex1 + 1 }}
  3038. </div>
  3039. <div style="margin-right: 10px; width: 300px" v-if="testJson.testJson[index1].checkList[checkIndex1] &&
  3040. testJson.testJson[index1].checkList[checkIndex1]
  3041. .imgType &&
  3042. testJson.testJson[index1].checkList[checkIndex1]
  3043. .imgType == 1
  3044. ">
  3045. <div class="inImg" @click.stop="
  3046. previewImg(
  3047. testJson.testJson[index1].checkList[checkIndex1]
  3048. .src
  3049. )
  3050. ">
  3051. <el-image :src="testJson.testJson[index1].checkList[checkIndex1]
  3052. .src
  3053. " lazy />
  3054. <!-- <img :src="
  3055. testJson.testJson[index1].checkList[checkIndex1]
  3056. .src
  3057. " alt="" /> -->
  3058. </div>
  3059. </div>
  3060. <textarea class="a_add_head_input textarea_css" v-autoHeight="40" v-else v-model="testJson.testJson[index1].checkList[checkIndex1]
  3061. " placeholder="请输入选项" style="width: 300px; margin-right: 10px"
  3062. @change="() => { $forceUpdate() }"></textarea>
  3063. <div class="xzUpImg" @click.stop="addImg($event)">
  3064. <img src="../../assets/icon/xzUpImg.png" alt="" />
  3065. <input type="file" accept="image/*" style="display: none"
  3066. @change="beforeUploadTi($event, index1, checkIndex1)" />
  3067. </div>
  3068. <div class="moveBtn moveBtn2" v-if="testJson.testJson[index1].testItem != 1">
  3069. <div class="chapter_upload_up" @click.stop="tcheckMove(1, index1, checkIndex1)">
  3070. </div>
  3071. <div class="chapter_upload_down" @click.stop="tcheckMove(2, index1, checkIndex1)"></div>
  3072. </div>
  3073. <div class="a_add_body_div">
  3074. <el-button type="primary" size="small"
  3075. @click.stop="addTcheckList(testJson.testJson[index1], checkIndex1)">添加</el-button>
  3076. <el-button type="primary" size="small"
  3077. @click.stop="deleteTcheckList(testJson.testJson[index1], checkIndex1)"
  3078. v-if="testJson.testJson[index1].testItem != 1">删除
  3079. </el-button>
  3080. </div>
  3081. </el-checkbox>
  3082. </div>
  3083. </el-checkbox-group>
  3084. </div>
  3085. <!-- <div class="a_add_body_div">
  3086. <el-button type="primary" size="small" @click="addTcheckList(testJson.testJson[index1])">添加</el-button>
  3087. <el-button type="primary" size="small" @click="deleteTcheckList(testJson.testJson[index1])"
  3088. v-if="testJson.testJson[index1].testItem != 1">删除
  3089. </el-button>
  3090. </div> -->
  3091. </div>
  3092. </div>
  3093. </div>
  3094. </div>
  3095. <span slot="footer" class="dialog-footer">
  3096. <el-button @click="closePan(45)">取 消</el-button>
  3097. <el-button type="primary" @click="addTest">确 定</el-button>
  3098. </span>
  3099. </el-dialog>
  3100. <el-dialog title="添加工具" :visible.sync="dialogVisible4" :append-to-body="true" width="600px"
  3101. :before-close="handleClose" class="dialog_diy addToolsDia">
  3102. <div class="toolChoose">
  3103. <div class="tools">
  3104. <div class="leftTools" style="
  3105. width: 100%;
  3106. padding: 0 0 15px 0;
  3107. " v-for="(itemTools, itemToolsIndex) in chapTools" :key="itemToolsIndex">
  3108. <div style="
  3109. display: flex;
  3110. flex-direction: row;
  3111. align-items: baseline;
  3112. flex-wrap: nowrap;
  3113. justify-content: flex-start;
  3114. position: relative;
  3115. ">
  3116. <div class="chooseWho">
  3117. <div :class="chapToolsType == 0 ? 'isChooseActive' : ''" @click="chapToolsType = 0">
  3118. 互动类
  3119. </div>
  3120. <div :class="chapToolsType == 1 ? 'isChooseActive' : ''" @click="chapToolsType = 1">
  3121. 思维类
  3122. </div>
  3123. <div :class="chapToolsType == 2 ? 'isChooseActive' : ''" @click="chapToolsType = 2">
  3124. 评价类
  3125. </div>
  3126. <div :class="chapToolsType == 2 ? 'isChooseActive' : ''" @click="chapToolsType = 2">
  3127. 其他
  3128. </div>
  3129. </div>
  3130. </div>
  3131. <div style="min-height: 163px">
  3132. <div class="toolSort" v-if="chapToolsType == 0">
  3133. <div class="tool" :class="{ isToolChoose: itemTools.tools.indexOf(8) != -1 }" @click="chapAddTools(8)">
  3134. <div class="whiteBIcon" @click.stop="chapAddTools(8)">
  3135. <img src="../../assets/icon/secondToolList/library.png" alt />
  3136. <div style="margin: 5px 0">素材库</div>
  3137. </div>
  3138. <div class="noCTool"><img src="../../assets/icon/new/isToolC.png" alt="" /></div>
  3139. <div class="isCTool" v-if="itemTools.tools.indexOf(8) != -1"><img
  3140. src="../../assets/icon/new/isToolC.png" alt="" /></div>
  3141. <!-- <div class="check" @click="chapAddTools(8)">
  3142. <img src="../../assets/icon/checkNo.png" alt v-if="itemTools.tools.indexOf(8) == -1" />
  3143. <div class="checkDiv" v-else>
  3144. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  3145. </div>
  3146. </div> -->
  3147. </div>
  3148. </div>
  3149. <div class="toolSort" v-if="chapToolsType == 1">
  3150. <div class="tool" :class="{ isToolChoose: itemTools.tools.indexOf(7) != -1 }" @click="chapAddTools(7)">
  3151. <div class="whiteBIcon" @click.stop="chapAddTools(7)">
  3152. <img src="../../assets/icon/secondToolList/mindNetwork.png" alt />
  3153. <div style="margin: 5px 0">思维网格</div>
  3154. </div>
  3155. <div class="noCTool"><img src="../../assets/icon/new/isToolC.png" alt="" /></div>
  3156. <div class="isCTool" v-if="itemTools.tools.indexOf(7) != -1"><img
  3157. src="../../assets/icon/new/isToolC.png" alt="" /></div>
  3158. <!-- <div class="check" @click="chapAddTools(7)">
  3159. <img src="../../assets/icon/checkNo.png" alt v-if="itemTools.tools.indexOf(7) == -1" />
  3160. <div class="checkDiv" v-else>
  3161. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  3162. </div>
  3163. </div> -->
  3164. </div>
  3165. <div class="tool" :class="{ isToolChoose: itemTools.tools.indexOf(1) != -1 }" @click="chapAddTools(1)">
  3166. <div class="whiteBIcon" @click.stop="chapAddTools(1)">
  3167. <img src="../../assets/icon/secondToolList/whiteBoard.png" alt />
  3168. <div style="margin: 5px 0">电子白板</div>
  3169. </div>
  3170. <div class="noCTool"><img src="../../assets/icon/new/isToolC.png" alt="" /></div>
  3171. <div class="isCTool" v-if="itemTools.tools.indexOf(1) != -1"><img
  3172. src="../../assets/icon/new/isToolC.png" alt="" /></div>
  3173. <!-- <div class="check" @click="chapAddTools(1)">
  3174. <img src="../../assets/icon/checkNo.png" alt v-if="itemTools.tools.indexOf(1) == -1" />
  3175. <div class="checkDiv" v-else>
  3176. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  3177. </div>
  3178. </div> -->
  3179. </div>
  3180. <div class="tool" :class="{ isToolChoose: itemTools.tools.indexOf(2) != -1 }" @click="chapAddTools(2)">
  3181. <div class="whiteBIcon" @click.stop="chapAddTools(2)">
  3182. <img src="../../assets/icon/secondToolList/note.png" alt />
  3183. <div style="margin: 5px 0">便签</div>
  3184. </div>
  3185. <div class="noCTool"><img src="../../assets/icon/new/isToolC.png" alt="" /></div>
  3186. <div class="isCTool" v-if="itemTools.tools.indexOf(2) != -1"><img
  3187. src="../../assets/icon/new/isToolC.png" alt="" /></div>
  3188. <!-- <div class="check" @click="chapAddTools(2)">
  3189. <img src="../../assets/icon/checkNo.png" alt v-if="itemTools.tools.indexOf(2) == -1" />
  3190. <div class="checkDiv" v-else>
  3191. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  3192. </div>
  3193. </div> -->
  3194. </div>
  3195. <div class="tool" :class="{ isToolChoose: itemTools.tools.indexOf(6) != -1 }" @click="chapAddTools(6)">
  3196. <div class="whiteBIcon" @click.stop="chapAddTools(6)">
  3197. <img src="../../assets/icon/secondToolList/doc.png" alt />
  3198. <div style="margin: 5px 0">协同文档</div>
  3199. </div>
  3200. <div class="noCTool"><img src="../../assets/icon/new/isToolC.png" alt="" /></div>
  3201. <div class="isCTool" v-if="itemTools.tools.indexOf(6) != -1"><img
  3202. src="../../assets/icon/new/isToolC.png" alt="" /></div>
  3203. <!-- <div class="check" @click="chapAddTools(6)">
  3204. <img src="../../assets/icon/checkNo.png" alt v-if="itemTools.tools.indexOf(6) == -1" />
  3205. <div class="checkDiv" v-else>
  3206. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  3207. </div>
  3208. </div> -->
  3209. </div>
  3210. <div class="tool" :class="{ isToolChoose: itemTools.tools.indexOf(3) != -1 }" @click="chapAddTools(3)">
  3211. <div class="whiteBIcon" @click.stop="chapAddTools(3)">
  3212. <img src="../../assets/icon/secondToolList/mindMapping.png" alt />
  3213. <div style="margin: 5px 0">思维导图</div>
  3214. </div>
  3215. <div class="noCTool"><img src="../../assets/icon/new/isToolC.png" alt="" /></div>
  3216. <div class="isCTool" v-if="itemTools.tools.indexOf(3) != -1"><img
  3217. src="../../assets/icon/new/isToolC.png" alt="" /></div>
  3218. <!-- <div class="check" @click="chapAddTools(3)">
  3219. <img src="../../assets/icon/checkNo.png" alt v-if="itemTools.tools.indexOf(3) == -1" />
  3220. <div class="checkDiv" v-else>
  3221. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  3222. </div>
  3223. </div> -->
  3224. </div>
  3225. <div class="tool" :class="{ isToolChoose: itemTools.tools.indexOf(31) != -1 }" @click="chapAddTools(31)">
  3226. <div class="whiteBIcon" @click.stop="chapAddTools(31)">
  3227. <img src="../../assets/icon/secondToolList/networkPanel.png" alt />
  3228. <div style="margin: 5px 0">数学画板</div>
  3229. </div>
  3230. <div class="noCTool"><img src="../../assets/icon/new/isToolC.png" alt="" /></div>
  3231. <div class="isCTool" v-if="itemTools.tools.indexOf(31) != -1"><img
  3232. src="../../assets/icon/new/isToolC.png" alt="" /></div>
  3233. <!-- <div class="check" @click="chapAddTools(31)">
  3234. <img src="../../assets/icon/checkNo.png" alt v-if="itemTools.tools.indexOf(31) == -1" />
  3235. <div class="checkDiv" v-else>
  3236. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  3237. </div>
  3238. </div> -->
  3239. </div>
  3240. </div>
  3241. <div class="toolSort" v-if="chapToolsType == 2">
  3242. <div class="tool" :class="{ isToolChoose: itemTools.tools.indexOf(5) != -1 }" @click="chapAddTools(5)">
  3243. <div class="whiteBIcon" @click.stop="chapAddTools(5)">
  3244. <img src="../../assets/icon/thirdToolList/score.png" alt />
  3245. <div style="margin: 5px 0">量规评分</div>
  3246. </div>
  3247. <div class="noCTool"><img src="../../assets/icon/new/isToolC.png" alt="" /></div>
  3248. <div class="isCTool" v-if="itemTools.tools.indexOf(5) != -1"><img
  3249. src="../../assets/icon/new/isToolC.png" alt="" /></div>
  3250. <!-- <div class="check" @click="chapAddTools(5)">
  3251. <img src="../../assets/icon/checkNo.png" alt v-if="itemTools.tools.indexOf(5) == -1" />
  3252. <div class="checkDiv" v-else>
  3253. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  3254. </div>
  3255. </div> -->
  3256. </div>
  3257. <div class="tool" :class="{ isToolChoose: itemTools.tools.indexOf(4) != -1 }" @click="chapAddTools(4)">
  3258. <div class="whiteBIcon" @click.stop="openTools(chapCount, 4, null)">
  3259. <img src="../../assets/icon/thirdToolList/ask.png" alt />
  3260. <div style="margin: 5px 0">问卷调查</div>
  3261. </div>
  3262. <div class="noCTool"><img src="../../assets/icon/new/isToolC.png" alt="" /></div>
  3263. <div class="isCTool" v-if="itemTools.tools.indexOf(4) != -1"><img
  3264. src="../../assets/icon/new/isToolC.png" alt="" /></div>
  3265. <!-- <div class="check" @click="chapAddTools(4)">
  3266. <img src="../../assets/icon/checkNo.png" alt v-if="itemTools.tools.indexOf(4) == -1" />
  3267. <div class="checkDiv" v-else>
  3268. <img src="../../assets/icon/checkedIs.png" alt /><span>已选择</span>
  3269. </div>
  3270. </div> -->
  3271. </div>
  3272. </div>
  3273. </div>
  3274. <div>
  3275. <input type="text" placeholder="添加工具描述" class="binfo_input" style="margin: 20px 0; width: 100% !important"
  3276. v-model="itemTools.toolDetail" />
  3277. </div>
  3278. </div>
  3279. </div>
  3280. </div>
  3281. <span slot="footer" class="dialog-footer">
  3282. <el-button @click="dialogVisible4 = false">取 消</el-button>
  3283. <el-button type="primary" @click="addChaptersDataTools">确定</el-button>
  3284. </span>
  3285. </el-dialog>
  3286. <el-dialog title="添加问答" :visible.sync="dialogVisible8" :append-to-body="true" width="500px"
  3287. :before-close="(done) => { closePan(15) }" class="dialog_diy">
  3288. <div>
  3289. <div class="a_add_title" style="
  3290. display: flex;
  3291. flex-direction: column;
  3292. align-items: flex-start;
  3293. justify-content: center;
  3294. ">
  3295. <div style="margin-bottom: 20px; font-size: 20px">问题:</div>
  3296. <!-- <el-input v-model="answerQ" placeholder="请输入您要问的问题"></el-input> -->
  3297. <textarea rows="1" v-autoHeight="40" type="text" placeholder="请输入您要问的问题" class="binfo_input"
  3298. style="width: 100% !important;border:1px solid #DCDFE6" v-model="answerQ"></textarea>
  3299. </div>
  3300. </div>
  3301. <span slot="footer" class="dialog-footer">
  3302. <el-button @click="closePan(15)">取 消</el-button>
  3303. <el-button type="primary" @click="addAnswer">确 定</el-button>
  3304. </span>
  3305. </el-dialog>
  3306. <el-dialog title="添加问题" :visible.sync="dialogVisibleMp3" :append-to-body="true" width="500px"
  3307. :before-close="handleClose" class="dialog_diy">
  3308. <div>
  3309. <div class="a_add_title" style="
  3310. display: flex;
  3311. flex-direction: column;
  3312. align-items: flex-start;
  3313. justify-content: center;
  3314. ">
  3315. <div style="margin-bottom: 20px; font-size: 20px">问题:</div>
  3316. <el-input v-model="answerQ" placeholder="请输入您想要回答的问题"></el-input>
  3317. </div>
  3318. </div>
  3319. <span slot="footer" class="dialog-footer">
  3320. <el-button @click="dialogVisibleMp3 = false">取 消</el-button>
  3321. <el-button type="primary" @click="addMp3Answer">确 定</el-button>
  3322. </span>
  3323. </el-dialog>
  3324. <el-dialog title="上传图片" :visible.sync="choosePicVisible" :append-to-body="true" width="600px"
  3325. :before-close="handleClose" class="dialog_diy">
  3326. <div>
  3327. <div class="fileCss" style="padding-top: 20px">
  3328. <div>
  3329. <button class="info_btn" @click="addImg($event)">
  3330. 选择本地文件
  3331. <input type="file" accept="image/*" style="display: none" @change="beforeUpload1" />
  3332. </button>
  3333. <div class="spanName">选择本地文件</div>
  3334. </div>
  3335. <!-- <div>
  3336. <el-button @click="getAllBanner" v-if="isSysPic == false">选择系统文件</el-button>
  3337. <div class="isSysPic" v-if="isSysPic == true && cover.length > 0">
  3338. <img :src="cover[0].url" alt="" />
  3339. <div class="deletePic" @click="deleteSysPic">
  3340. <img src="../../assets/icon/delete.png" alt="" />
  3341. </div>
  3342. </div>
  3343. <div class="spanName">选择系统文件</div>
  3344. </div> -->
  3345. <div>
  3346. <el-button @click="searchImageValue = courseName, resetImage()" v-if="isSysPic2 == false">选择网络文件</el-button>
  3347. <div class="isSysPic" v-if="isSysPic2 == true && cover.length > 0">
  3348. <img :src="cover[0].url" alt="" />
  3349. <div class="deletePic" @click="deleteSysPic">
  3350. <img src="../../assets/icon/delete.png" alt="" />
  3351. </div>
  3352. </div>
  3353. <div class="spanName">选择网络文件</div>
  3354. </div>
  3355. </div>
  3356. <!-- <div class="fileCss">
  3357. </div> -->
  3358. </div>
  3359. <span slot="footer" class="dialog-footer">
  3360. <el-button @click="choosePicVisible = false">取 消</el-button>
  3361. <el-button type="primary" @click="choosePicVisible = false">确 定</el-button>
  3362. </span>
  3363. </el-dialog>
  3364. <el-dialog title="选择系统文件" :visible.sync="sysPicVisible" :append-to-body="true" width="710px"
  3365. :before-close="handleClose" class="dialog_diy">
  3366. <div class="cru_selectBox" style="margin: 0">
  3367. <div @click="getChoosePic(1)" class="cru_select" :class="chooseType == 1 ? 'cru_selected' : ''">
  3368. 绘画
  3369. </div>
  3370. <div @click="getChoosePic(2)" class="cru_select" :class="chooseType == 2 ? 'cru_selected' : ''">
  3371. 科技
  3372. </div>
  3373. <div @click="getChoosePic(3)" class="cru_select" :class="chooseType == 3 ? 'cru_selected' : ''">
  3374. 人文
  3375. </div>
  3376. <div @click="getChoosePic(4)" class="cru_select" :class="chooseType == 4 ? 'cru_selected' : ''">
  3377. 艺术
  3378. </div>
  3379. </div>
  3380. <div class="sysPicBox">
  3381. <div v-for="(sys, sysIndex) in sysPic" :key="sysIndex" class="sysPic">
  3382. <img :src="sys.poster" alt="" @click="chooseSysPic(sys.poster)" />
  3383. </div>
  3384. </div>
  3385. </el-dialog>
  3386. <el-dialog title="选择网络文件" :visible.sync="sysPicVisible2" :append-to-body="true" width="710px"
  3387. :before-close="handleClose" class="dialog_diy">
  3388. <div>
  3389. <div class="people_top_right" style="display: flex;align-items: center;">
  3390. <div style="position: relative; width: 100%;">
  3391. <el-input style="height: 100%" placeholder="搜索图片关键字" v-model="searchImageValue"
  3392. @keyup.enter.native="resetImage()"></el-input>
  3393. <div class="search_img" @click="resetImage" style="right: 10px;">
  3394. <img src="../../assets/icon/search.png" alt />
  3395. </div>
  3396. </div>
  3397. <el-button type="primary" size="default" style="margin-left: 10px;" @click="changePicture">换一组</el-button>
  3398. </div>
  3399. <div class="sysPicBox" v-loading="imageloading">
  3400. <div class="picNone" v-if="!imageList.length">请输入关键词搜索图片</div>
  3401. <div v-for="(sys, sysIndex) in imageList" :key="sysIndex" class="sysPic">
  3402. <img :src="sys.url" alt="" @click="chooseSysPic2(sys.url)" />
  3403. </div>
  3404. </div>
  3405. </div>
  3406. </el-dialog>
  3407. <el-dialog title="选择匹配" :visible.sync="dialogVisibleSelect" :append-to-body="true" width="800px"
  3408. :before-close="(done) => { closePan(41) }" class="dialog_diy dialog_diy3 fullStyle">
  3409. <div v-if="selectJson" style="height:100%">
  3410. <div class="select_box1" v-if="selectSteps == 1">
  3411. <div class="select_box1_img">
  3412. <div class="select_box1_title">
  3413. <span>上传题目图片</span><span>提示:请将所有题目上传为一张图片。</span>
  3414. </div>
  3415. <div class="select_box1_add_img">
  3416. <div class="uploadFm" @click="addImg($event)" v-if="!selectJson.url">
  3417. <input type="file" accept="image/*" style="display: none" @change="beforeUploadSelect" />
  3418. <img src="../../assets/icon/addPoster.png" alt="" />
  3419. </div>
  3420. <div class="isSysPic" v-else>
  3421. <img :src="selectJson.url" alt="" @click="previewImg(selectJson.url)" />
  3422. <div class="deletePic" @click="deleteSelectPic">
  3423. <img src="../../assets/icon/delete.png" alt="" />
  3424. </div>
  3425. </div>
  3426. </div>
  3427. </div>
  3428. <div class="select_box1_select">
  3429. <div class="select_box1_title">
  3430. <span>添加选项</span><span>提示:请输入以上题目的选项内容,此选项为所有题目共享。</span>
  3431. </div>
  3432. <div class="select_box1_select_box">
  3433. <el-input v-for="(item2, checkIndex) in selectJson.select" :key="checkIndex"
  3434. v-model="selectJson.select[checkIndex]" placeholder="请输入选项"
  3435. style="width: 150px; margin: 10px 10px 0 0"></el-input>
  3436. <div class="select_box1_select_box_add">
  3437. <el-button style="margin: 10px 0px 0 0" type="primary" size="small" @click="addSelectList(selectJson)">
  3438. 添加</el-button>
  3439. <el-button type="primary" size="small" style="margin: 10px 0 0 0" @click="deleteSelectList(selectJson)"
  3440. v-if="selectJson.select && selectJson.select.length > 0">删除</el-button>
  3441. </div>
  3442. </div>
  3443. </div>
  3444. </div>
  3445. <div v-if="selectSteps == 2" style="height:100%">
  3446. <div class="select_box2">
  3447. <div class="select_box2_title">设置每道题目的正确选项</div>
  3448. <div class="select_box2_box">
  3449. <div class="select_box2_img">
  3450. <img :src="selectJson.url" alt="" @click="previewImg(selectJson.url)" />
  3451. </div>
  3452. <div class="select_box2_answer">
  3453. <div class="select_answer_title">根据题目选择对应答案</div>
  3454. <div class="select_box2_answer_box" v-for="(item2, checkIndex) in selectJson.select" :key="checkIndex">
  3455. <span>{{ checkIndex + 1 }}</span>
  3456. <el-select v-model="selectJson.answer[checkIndex]" placeholder="请选择正确答案">
  3457. <el-option v-for="(e, eIndex) in selectJson.select" :key="eIndex" :label="e" :value="eIndex">
  3458. </el-option>
  3459. </el-select>
  3460. </div>
  3461. </div>
  3462. </div>
  3463. </div>
  3464. </div>
  3465. </div>
  3466. <span slot="footer" class="dialog-footer">
  3467. <el-button type="primary" @click="nextSelectSteps()" v-if="selectSteps == 1">下一步</el-button>
  3468. <el-button @click="selectSteps--" v-if="selectSteps == 2">上一步</el-button>
  3469. <el-button type="primary" @click="addSelectAnswer" v-if="selectSteps == 2">确 定</el-button>
  3470. </span>
  3471. </el-dialog>
  3472. <el-dialog title="添加评价" :visible.sync="dialogVisibleRate" :append-to-body="true" width="650px"
  3473. :before-close="handleClose" class="dialog_diy">
  3474. <div style="background: #fff; padding: 15px; box-sizing: border-box">
  3475. <div style="font-size: 18px; color: #a9a9a9">请输入个人评价指标:</div>
  3476. <div class="pjCss" style="width: 100%">
  3477. <div v-if="rateJson.length" class="elist_input" style="height: 360px; overflow: auto">
  3478. <div v-for="(eItem, eIndex) in rateJson" :key="eIndex" class="elist_input_box">
  3479. <span style="min-width: 100px; text-align: right">个人评价指标:</span>
  3480. <input type="input" v-model="eItem.value" placeholder="填写评价名称" />
  3481. <div class="remove" @click="deletRateList(eIndex)"></div>
  3482. <div style="width: 100%; display: flex">
  3483. <span style="min-width: 100px; text-align: right">评星等级:</span>
  3484. <el-rate v-model="eItem.score" disabled></el-rate>
  3485. </div>
  3486. <div class="elist_inptu_text" style="align-items: flex-start">
  3487. <span style="min-width: 100px; text-align: right">描述:</span>
  3488. <textarea class="rate_textarea" :rows="3" v-model="eItem.detail" placeholder="填写评价描述"></textarea>
  3489. </div>
  3490. </div>
  3491. </div>
  3492. <div class="addToolFun" @click="addRateList()">
  3493. <div class="addToolImg">
  3494. <img src="../../assets/icon/add.png" alt />
  3495. </div>
  3496. <div>添加</div>
  3497. </div>
  3498. </div>
  3499. </div>
  3500. <span slot="footer" class="dialog-footer">
  3501. <el-button @click="dialogVisibleRate = false">取 消</el-button>
  3502. <el-button type="primary" @click="addRateAnswer">确 定</el-button>
  3503. </span>
  3504. </el-dialog>
  3505. <el-dialog title="排序设置" :visible.sync="dialogVisibleSentence" :append-to-body="true" width="1000px"
  3506. :before-close="(done) => { closePan(47) }" class="dialog_diy dialog_diy3 fullStyle">
  3507. <div style="height: 100%;">
  3508. <div class="sentenBox" style="height: 100%;">
  3509. <div class="addSen" @click="addSt">添加题目</div>
  3510. <div v-for="(st, stIndex) in sentenceList" :key="stIndex" class="sentenContent">
  3511. <div class="sentenTopBox">
  3512. <div class="sentenTop" :index="stIndex + 1">
  3513. <div>题目设置</div>
  3514. <div>
  3515. <el-input placeholder="请输入卡片内容" v-model="st.sentenceTitle" :maxlength="10"></el-input>
  3516. </div>
  3517. <div @click="addSen(stIndex)">添加</div>
  3518. <div class="remove1" v-if="sentenceList.length > 1" @click="deleteSentence(stIndex)"></div>
  3519. </div>
  3520. </div>
  3521. <div class="cardList">
  3522. <div v-if="st.addSentence.length > 0" class="cardBox">
  3523. <div class="isCard" v-for="(s, sIndex) in st.addSentence" :key="sIndex"
  3524. @click="setRightAnswer(s, stIndex, sIndex)">
  3525. <el-tooltip class="item" effect="light" :content="s" placement="top">
  3526. <div>{{ s }}</div>
  3527. </el-tooltip>
  3528. <div class="deleteWord" @click.stop="deleteS(s, stIndex, sIndex)">
  3529. <img src="../../assets/icon/delete.png" alt="" />
  3530. </div>
  3531. </div>
  3532. </div>
  3533. <div class="card">
  3534. <img src="../../assets/icon/conSentences/noTitle.png" alt="" />
  3535. </div>
  3536. </div>
  3537. <div class="rightCardBox">
  3538. <div>正确顺序</div>
  3539. <div class="rightCardList">
  3540. <div v-if="st.rightAnswer.length > 0" class="cardBox">
  3541. <div v-for="(r, rIndex) in st.rightAnswer" :key="rIndex" class="cardCss">
  3542. <div class="isCard1" @click="returnCard(r, stIndex, rIndex)">
  3543. <el-tooltip class="item" effect="light" :content="r" placement="top">
  3544. <div>{{ r }}</div>
  3545. </el-tooltip>
  3546. </div>
  3547. <div>{{ rIndex + 1 }}</div>
  3548. </div>
  3549. </div>
  3550. <div class="card" v-if="st.rightAnswer.length == 0">
  3551. <img src="../../assets/icon/conSentences/noAnswer.png" alt="" />
  3552. </div>
  3553. <div class="card" v-else>
  3554. <img src="../../assets/icon/conSentences/clickNo.png" alt="" />
  3555. </div>
  3556. </div>
  3557. </div>
  3558. </div>
  3559. </div>
  3560. </div>
  3561. <span slot="footer" class="dialog-footer">
  3562. <el-button @click="closePan(47)">取 消</el-button>
  3563. <el-button type="primary" @click="addSentenceTool">确 定</el-button>
  3564. </span>
  3565. </el-dialog>
  3566. <el-dialog title="添加表格" :visible.sync="dialogVisibleTable" :append-to-body="true" width="95%"
  3567. :before-close="handleClose" class="dialog_diy">
  3568. <el-form>
  3569. <!-- <el-form-item label="文本标题">
  3570. <el-input v-model="AttText.title" auto-complete="off" @input="change2" placeholder="请输入文本标题..."></el-input>
  3571. </el-form-item> -->
  3572. <div>表格内容</div>
  3573. <Table v-model="tableJson.text" @change="change"></Table>
  3574. </el-form>
  3575. <span slot="footer" class="dialog-footer">
  3576. <!-- <el-button @click="dialogVisibleTable = false">取 消</el-button>
  3577. <el-button type="primary" @click="addTableJson">确定</el-button> -->
  3578. <el-button type="primary" @click="addTableJson">上传模板</el-button>
  3579. </span>
  3580. </el-dialog>
  3581. <el-dialog title="添加文档" :visible.sync="dialogVisibleWord" :append-to-body="true" width="800px"
  3582. :before-close="handleClose" class="dialog_diy">
  3583. <el-form>
  3584. <!-- <el-form-item label="文本标题">
  3585. <el-input v-model="AttText.title" auto-complete="off" @input="change2" placeholder="请输入文本标题..."></el-input>
  3586. </el-form-item> -->
  3587. <div>文档内容</div>
  3588. <editor-bar v-model="wordJson.text"></editor-bar>
  3589. </el-form>
  3590. <span slot="footer" class="dialog-footer">
  3591. <!-- <el-button @click="dialogVisibleWord = false">取 消</el-button> -->
  3592. <el-button type="primary" @click="addWordJson">上传模板</el-button>
  3593. </span>
  3594. </el-dialog>
  3595. <el-dialog title="添加班级" :visible.sync="dialogVisibleMoreUpload" :append-to-body="true" width="30%"
  3596. :before-close="handleClose" class="dialog_diy">
  3597. <div style="
  3598. width: 100%;
  3599. display: flex;
  3600. flex-direction: row;
  3601. flex-wrap: nowrap;
  3602. align-items: center;
  3603. justify-content: center;
  3604. ">
  3605. <div>班级:</div>
  3606. <el-select multiple v-model="uploadJson" placeholder="请选择">
  3607. <el-option v-for="item in classJuri" :key="item.id" :label="item.name" :value="item.id">
  3608. </el-option>
  3609. </el-select>
  3610. </div>
  3611. <span slot="footer" class="dialog-footer">
  3612. <el-button @click="dialogVisibleMoreUpload = false">取 消</el-button>
  3613. <el-button type="primary" @click="addMoreUpload">确定</el-button>
  3614. </span>
  3615. </el-dialog>
  3616. <el-dialog title="设置随机码" :visible.sync="dialogVisibleInvite" :append-to-body="true" width="360px"
  3617. :before-close="handleClose" class="dialog_diy">
  3618. <div style="
  3619. width: 100%;
  3620. display: flex;
  3621. flex-direction: row;
  3622. flex-wrap: nowrap;
  3623. align-items: center;
  3624. justify-content: center;
  3625. ">
  3626. <div>随机码:</div>
  3627. <el-input v-model="icode" style="width: 240px" placeholder="请输入随机码"></el-input>
  3628. </div>
  3629. <span slot="footer" class="dialog-footer">
  3630. <el-button @click="dialogVisibleInvite = false">取 消</el-button>
  3631. <el-button type="primary" @click="addInvite">确定</el-button>
  3632. </span>
  3633. </el-dialog>
  3634. <el-dialog title="添加预设时间" :visible.sync="dialogVisiblePreTime" :append-to-body="true" width="450px"
  3635. :before-close="handleClose" class="dialog_diy">
  3636. <div>
  3637. <div style="margin-bottom: 20px;color: #999;">提示:点击“+”或“-”修改倒计时时长。</div>
  3638. <Time :preTime="preTime" @updateTimeNum="updateTime" v-if="dialogVisiblePreTime"></Time>
  3639. </div>
  3640. <span slot="footer" class="dialog-footer">
  3641. <el-button @click="dialogVisiblePreTime = false">取 消</el-button>
  3642. <el-button type="primary" @click="addPreTime">确定</el-button>
  3643. </span>
  3644. </el-dialog>
  3645. <el-dialog title="导入目标" :visible.sync="dialogVisiblemb" :append-to-body="true" width="70%" :before-close="handleClose"
  3646. class="dialog_diy">
  3647. <div>
  3648. <div style="
  3649. width: 100%;
  3650. display: flex;
  3651. flex-direction: row;
  3652. flex-wrap: nowrap;
  3653. align-content: center;
  3654. align-items: center;
  3655. justify-content: space-between;
  3656. ">
  3657. <div style="
  3658. display: flex;
  3659. flex-flow: row nowrap;
  3660. align-items: flex-start;
  3661. width: 100%;
  3662. flex-direction: column;
  3663. flex-wrap: nowrap;
  3664. position: relative;
  3665. ">
  3666. <div class="e_box">
  3667. <!-- <div class="e_card" v-for="(item, index) in evaJuri" :key="index">
  3668. <div class="e_card_picture">
  3669. <img src="../../assets/e_picture.png" />
  3670. </div>
  3671. <div class="e_card_name">
  3672. <span>{{ item.title }}</span>
  3673. </div>
  3674. <div class="e_card_btn">
  3675. <span @click="checkEva(item.id, 2)">导入</span>
  3676. </div>
  3677. </div> -->
  3678. <!-- <div class="addEva" @click="openT">
  3679. <img src="../../assets/icon/addEva.png" alt="" />
  3680. </div> -->
  3681. <div style="display:flex;justify-content: flex-end;margin-bottom: 10px;"><el-button @click="openT" type="primary" size="small">添加目标</el-button></div>
  3682. <el-table
  3683. v-if="evaJuri.length"
  3684. ref="table"
  3685. :data="evaJuri"
  3686. border
  3687. :fit="true"
  3688. style="width: 100%"
  3689. :header-cell-style="{ background: '#f1f1f1', fontSize: '17px' }"
  3690. :row-class-name="tableRowClassName"
  3691. >
  3692. <el-table-column
  3693. label="目标名称"
  3694. min-width="15"
  3695. align="center"
  3696. prop="title"
  3697. >
  3698. </el-table-column>
  3699. <el-table-column
  3700. prop="username"
  3701. label="负责人"
  3702. min-width="15"
  3703. align="center"
  3704. >
  3705. </el-table-column>
  3706. <el-table-column label="操作" width="250px">
  3707. <template slot-scope="scope">
  3708. <div class="btnBox">
  3709. <el-button
  3710. type="primary"
  3711. size="small"
  3712. @click="checkEva(scope.row.id, 2)"
  3713. >导入</el-button
  3714. >
  3715. </div>
  3716. </template>
  3717. </el-table-column>
  3718. </el-table>
  3719. <div v-if="evaJuri.length === 0" style="margin: 0 auto; color: #6e6e6e">
  3720. 暂无数据
  3721. </div>
  3722. </div>
  3723. </div>
  3724. </div>
  3725. </div>
  3726. <span slot="footer" class="dialog-footer">
  3727. <el-button @click="dialogVisiblemb = false">取 消</el-button>
  3728. </span>
  3729. </el-dialog>
  3730. <el-dialog title="分组设置" :visible.sync="dialogVisibleGroup" :append-to-body="true" width="650px"
  3731. :before-close="handleClose" class="dialog_diy">
  3732. <div class="groupBox">
  3733. <div v-if="groupJson.group" class="groupContent">
  3734. <div class="groupTitle">请设置小组数量及名称</div>
  3735. <div v-for="(item, index) in groupJson.group" :key="index" class="groupName">
  3736. <span class="groupn">{{ index + 1 }}组名称:</span>
  3737. <el-input v-model="item.name" placeholder="请输入名称..." style="width: 250px"></el-input>
  3738. <div class="groupBtn">
  3739. <el-button type="primary" size="small" @click="addGroup(index)" v-if="groupJson.group.length - 1 == index">
  3740. 添加</el-button>
  3741. <el-button type="primary" size="small" @click="deleteGroup(index)"
  3742. v-if="groupJson.group && groupJson.group.length > 1">删除</el-button>
  3743. </div>
  3744. </div>
  3745. </div>
  3746. <div class="groupContent">
  3747. <div class="groupTitle">请设置每组人数</div>
  3748. <!-- <el-input v-model="groupJson.number" placeholder="2-10人以内"
  3749. style="width: 150px; margin: 10px 10px 0 0"></el-input> -->
  3750. <el-input v-model="groupJson.number" style="width:150px" placeholder="请输入2-10的数字"
  3751. @change="numberPan"></el-input>
  3752. </div>
  3753. </div>
  3754. <span slot="footer" class="dialog-footer">
  3755. <el-button @click="dialogVisibleGroup = false">取 消</el-button>
  3756. <el-button type="primary" @click="addGroupJson">确定</el-button>
  3757. </span>
  3758. </el-dialog>
  3759. <el-dialog title="修改名称" :visible.sync="dialogVisibleupdataVideoT" :append-to-body="true" width="500px"
  3760. :before-close="handleClose" class="dialog_diy">
  3761. <div style="
  3762. width: 100%;
  3763. display: flex;
  3764. flex-direction: row;
  3765. flex-wrap: nowrap;
  3766. align-items: center;
  3767. justify-content: center;
  3768. ">
  3769. <div style="min-width: fit-content;">文件名称:</div>
  3770. <el-input v-model="line" placeholder="请输入要修改的名称"></el-input>
  3771. </div>
  3772. <span slot="footer" class="dialog-footer">
  3773. <el-button @click="dialogVisibleupdataVideoT = false">取 消</el-button>
  3774. <el-button type="primary" @click="updataVideoC">确 定</el-button>
  3775. </span>
  3776. </el-dialog>
  3777. <el-dialog title="创建作文题目" :visible.sync="englishDialogVisible" :append-to-body="true" width="800px"
  3778. :before-close="(done) => { closePan(69) }" class="dialog_diy fullStyle">
  3779. <englishRight @setEngList="setEnglishList" :englishList="englishList"></englishRight>
  3780. <span slot="footer" class="dialog-footer">
  3781. <el-button @click="englishDialogVisible = false">取 消</el-button>
  3782. <el-button type="primary" @click="addEnglish">确 定</el-button>
  3783. </span>
  3784. </el-dialog>
  3785. <el-dialog title="选择课程模板" :visible.sync="templateDialog" :append-to-body="true" width="630px"
  3786. :before-close="handleClose" class="dialog_diy">
  3787. <div class="template_box">
  3788. <div class="wordTeacher" v-for="(aa, indexF) in templateArray" :key="indexF" @click="checkctJson(aa)" :class="{wordTeacherA:ctJson.id == aa.id}">
  3789. <div class="wordPic">
  3790. <img src="../../assets/icon/new/course_template.png" alt />
  3791. </div>
  3792. <div style="
  3793. margin-top: 10px;
  3794. line-height: 19px;
  3795. overflow: hidden;
  3796. text-overflow: ellipsis;
  3797. white-space: nowrap;
  3798. padding: 0 20px;
  3799. ">
  3800. {{ aa.title }}
  3801. </div>
  3802. </div>
  3803. <div class="wordTeacher" @click="checkctJson({id: 1})" v-if="oid == '69893dca-1d47-11ed-8c78-005056b86db5'" :class="{wordTeacherA:ctJson.id == 1}">
  3804. <div class="wordPic">
  3805. <img src="../../assets/icon/new/course_template.png" alt />
  3806. </div>
  3807. <div style="
  3808. margin-top: 10px;
  3809. line-height: 19px;
  3810. overflow: hidden;
  3811. text-overflow: ellipsis;
  3812. white-space: nowrap;
  3813. padding: 0 20px;
  3814. ">
  3815. 简易模板
  3816. </div>
  3817. </div>
  3818. <div class="wordTeacher" @click="checkctJson({id: 2})" v-if="isPasteStage" :class="{wordTeacherA:ctJson.id == 2}">
  3819. <div class="wordPic">
  3820. <img src="../../assets/icon/new/course_template.png" alt />
  3821. </div>
  3822. <div style="
  3823. margin-top: 10px;
  3824. line-height: 19px;
  3825. overflow: hidden;
  3826. text-overflow: ellipsis;
  3827. white-space: nowrap;
  3828. padding: 0 20px;
  3829. ">
  3830. 智能粘贴模式
  3831. </div>
  3832. </div>
  3833. </div>
  3834. <span slot="footer" class="dialog-footer">
  3835. <el-button @click="templateDialog = false">取 消</el-button>
  3836. <el-button type="primary" @click="addTemplate(ctJson)">确 定</el-button>
  3837. </span>
  3838. </el-dialog>
  3839. <interVideo :dialogVisibleVideo.sync="dialogVisibleVideo" :videoJson="videoJson" @add="addVideoJson"></interVideo>
  3840. <el-dialog title="切换阶段顺序" :visible.sync="dialogVisibleStageChange" :append-to-body="true" width="400px"
  3841. :before-close="handleClose" class="dialog_diy dialog_diyStage">
  3842. <div class="change_stageBox">
  3843. <div class="navTask" v-for="(t, tIndex) in unitJson3" :key="tIndex">
  3844. <div class="nt_taskBox">
  3845. <div class="nt_taskTitle">{{ tIndex + 1 }}阶段</div>
  3846. <div class="nt_taskName">
  3847. <el-tooltip effect="light" :content="t.dyName" placement="top">
  3848. <span>{{ t.dyName }}</span>
  3849. </el-tooltip>
  3850. </div>
  3851. </div>
  3852. <div class="moveBtn" v-if="unitJson3.length > 1">
  3853. <div class="chapter_upload_up" @click.stop="stageMove(1, tIndex)">
  3854. </div>
  3855. <div class="chapter_upload_down" @click.stop="stageMove(2, tIndex)"></div>
  3856. </div>
  3857. </div>
  3858. </div>
  3859. <span slot="footer" class="dialog-footer">
  3860. <el-button @click="dialogVisibleStageChange = false">取 消</el-button>
  3861. <el-button type="primary" @click="updateChange">确定</el-button>
  3862. </span>
  3863. </el-dialog>
  3864. </div>
  3865. </template>
  3866. <script>
  3867. import "../../common/aws-sdk-2.235.1.min.js";
  3868. import { tools as toolsData } from "../../common/tools.js";
  3869. // import "../../common/aws-sdk-2.99.0.min.js";
  3870. import $ from "jquery";
  3871. import EditorBar from "../../components/tools/wangEnduit";
  3872. import Table from "../../components/tools/table";
  3873. import Mind from "../tools/jsmind2";
  3874. import Time from "../tools/time.vue";
  3875. import Sunburst from "../tools/sunburst";
  3876. import SeeBoard from "../tools/seeBoard";
  3877. import weilaiData from "./components/weilai.js";
  3878. import sourceDialog from "./teacherSource/dialog.vue";
  3879. import interVideo from "./interVideo/index.vue";
  3880. import englishRight from "./components/englishRight.vue";
  3881. export default {
  3882. components: {
  3883. EditorBar,
  3884. Mind,
  3885. Time,
  3886. Sunburst,
  3887. SeeBoard,
  3888. Table,
  3889. sourceDialog,
  3890. interVideo,
  3891. englishRight,
  3892. },
  3893. data() {
  3894. return {
  3895. checkAll: false,
  3896. chooseType: 1,
  3897. checkedCities: [],
  3898. isIndeterminate: true,
  3899. isSysPic: false,
  3900. isSysPic2: false,
  3901. steps: 1,
  3902. nbOrder: 0,
  3903. courseId: "",
  3904. chapToolsType: 0,
  3905. chapTools: [
  3906. {
  3907. tools: [],
  3908. toolDetail: "",
  3909. },
  3910. ],
  3911. line: "",
  3912. lineTitle: "",
  3913. sysPic: [],
  3914. sentenceList: [{ sentenceTitle: "", addSentence: [], rightAnswer: [] }],
  3915. sentenceList2: [],
  3916. isPushTitleList: [],
  3917. lineCount: 0,
  3918. lineType: 0,
  3919. chapCount: 0,
  3920. courseName: "",
  3921. isTeacherSee: false,
  3922. courseText: "",
  3923. preTime: 0,
  3924. formLabelWidth: "100px",
  3925. choosePicVisible: false,
  3926. sysPicVisible: false,
  3927. sysPicVisible2: false,
  3928. uploadLoading1: false,
  3929. noneBtnImg: false,
  3930. updateBoolean2: false,
  3931. unitIndex: 0,
  3932. taskCount: 0,
  3933. dialogVisible: false,
  3934. dialogVisible1: false,
  3935. dialogVisible2: false,
  3936. dialogVisible3: false,
  3937. dialogVisible4: false,
  3938. dialogVisible5: false,
  3939. dialogVisible6: false,
  3940. dialogVisible7: false,
  3941. dialogVisible8: false,
  3942. dialogVisible9: false,
  3943. dialogVisibleClass: false,
  3944. dialogVisibleMember: false,
  3945. dialogVisibleMp3: false,
  3946. dialogVisibleSelect: false,
  3947. dialogVisibleSentence: false,
  3948. dialogVisibleRate: false,
  3949. dialogVisibleChoice: false,
  3950. dialogVisiblemb: false,
  3951. dialogVisibleInvite: false,
  3952. dialogVisibleSource: false,
  3953. dialogVisibleVideo: false,
  3954. dialogVisibleStageChange: false,
  3955. dialogVisibleupdataVideoT: false,
  3956. englishDialogVisible: false,
  3957. templateDialog: false,
  3958. ctJson: {},
  3959. isClickColor: 1,
  3960. toolIndexType: "",
  3961. publicTool: 0,
  3962. searchPeople: "",
  3963. searchTN: "",
  3964. userid: this.$route.query.userid,
  3965. oid: this.$route.query.oid,
  3966. org: this.$route.query.org,
  3967. role: this.$route.query.role,
  3968. cid: this.$route.query.cid != undefined ? this.$route.query.cid : "",
  3969. dialogVisibleTable: false,
  3970. dialogVisibleWord: false,
  3971. tableJson: { text: "" },
  3972. wordJson: { text: "" },
  3973. dialogVisibleMoreUpload: false,
  3974. dialogVisiblePreTime: false,
  3975. uploadJson: [],
  3976. classJuri: [],
  3977. gradeList: [],
  3978. cover: [], //课程封面
  3979. myWord: [],
  3980. evaJuri: [],
  3981. evalua: "",
  3982. targetArray: [],
  3983. eTitle: "",
  3984. eJson: {},
  3985. fid: "", //一级
  3986. sid: "", //二级
  3987. tid: "", //二级
  3988. typeMode: 1,
  3989. eJSONNum: 0,
  3990. data: {
  3991. meta: {
  3992. name: "example",
  3993. author: "dd@163.com",
  3994. version: "0.2",
  3995. },
  3996. format: "node_array",
  3997. data: [{ id: "root", isroot: true, topic: "" }],
  3998. },
  3999. askJson: {
  4000. askCount: 1,
  4001. askTitle: "",
  4002. askJson: [{ askstitle: "", askItem: 1, checkList: [] }],
  4003. },
  4004. askJson2: {},
  4005. testJson: {},
  4006. testJson2: {},
  4007. selectJson: {},
  4008. selectJson2: {},
  4009. rateJson: [],
  4010. unitJson2: [],
  4011. unitJson3: [],
  4012. unitJson: [
  4013. {
  4014. dyName: "", //单元标题
  4015. chapterInfo: [
  4016. {
  4017. isread: false,
  4018. chapterid: this.guid(),
  4019. title: "",
  4020. courseName: "",
  4021. taskJson: [
  4022. {
  4023. task: "",
  4024. taskDetail: "",
  4025. chapterData: [],
  4026. toolText: "",
  4027. toolChoose: [
  4028. {
  4029. tool: [],
  4030. toolDetail: "",
  4031. toolType: 0,
  4032. askCount: 1,
  4033. askTitle: "",
  4034. askJson: [{ askstitle: "", askItem: 1, checkList: [] }],
  4035. },
  4036. ],
  4037. isShowTools: false,
  4038. askCount: 1,
  4039. isFold: 1,
  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. templateArray: [],
  4057. studentJuri: [],
  4058. teacherJuri: [],
  4059. checkboxList: [],
  4060. checkboxList2: [],
  4061. checkboxList3: [],
  4062. classSearch: "",
  4063. gradeId: "",
  4064. number: "",
  4065. tTitle: "",
  4066. tdetail: "",
  4067. templateC: {},
  4068. AttText: {},
  4069. AttTextType: 0,
  4070. AttTextIndex: 0,
  4071. cTemplate: "",
  4072. CourseType: [],
  4073. CourseType2: [],
  4074. CourseTypeJson: {},
  4075. courseTypeId: [],
  4076. courseTypeSon: [],
  4077. clearArray: [],
  4078. pTypeCheck: [],
  4079. pTypeCheckName: [],
  4080. loading: false,
  4081. toolType: 0,
  4082. inputShow: true,
  4083. inputShow2: true,
  4084. toolIndex: 0,
  4085. cidType: 0,
  4086. answerQ: "",
  4087. answerQ2: "",
  4088. grade: [],
  4089. grade2: [],
  4090. courseUserid: "",
  4091. timer: null,
  4092. timer2: null,
  4093. pasteTimer: null,
  4094. checkId: "",
  4095. isDelete: 1,
  4096. addindex: 0,
  4097. selectSteps: 1,
  4098. groupJson: {},
  4099. dialogVisibleGroup: false,
  4100. rightBoxHeight: 0,
  4101. ManAarray: [],
  4102. checkBoolean: false,
  4103. inviteCode: [],
  4104. inviteId: "",
  4105. icode: "",
  4106. easyArray: [2, 4],
  4107. sourceData: {},
  4108. updateSourcePan: false,
  4109. videoJson: {},
  4110. isBtnDisplay: false,
  4111. isStepDisplay: false,
  4112. isPasteStage: false,
  4113. isPasteTask: false,
  4114. isPasteChoice: false,
  4115. imageList: [],
  4116. imageloading: false,
  4117. searchImageValue: "",
  4118. ppage: 1,
  4119. toolsData: toolsData,
  4120. oldIndex: 0,
  4121. dragType:'',
  4122. oldUnitIndex: 0,
  4123. oldData: null,
  4124. newIndex: "",
  4125. englishList:{},
  4126. typeIndex: "",
  4127. courseState: 2,
  4128. taskJSONa: [
  4129. {
  4130. task: "",
  4131. taskDetail: "",
  4132. chapterData: [],
  4133. toolText: "",
  4134. toolChoose: [
  4135. {
  4136. tool: [],
  4137. toolDetail: "",
  4138. toolType: 0,
  4139. askCount: 1,
  4140. askTitle: "",
  4141. askJson: [
  4142. { askstitle: "", askItem: 1, checkList: [] },
  4143. ],
  4144. },
  4145. ],
  4146. isShowTools: false,
  4147. askCount: 1,
  4148. isFold: 1,
  4149. askTitle: "",
  4150. askJson: [{ askstitle: "", askItem: 1, checkList: [] }],
  4151. checkJson: [{ checkCount: [], checkPerent: [] }],
  4152. homeworkList: [],
  4153. },
  4154. ],
  4155. checkUnitIndex: 0,
  4156. };
  4157. },
  4158. directives: {
  4159. autoHeight: {
  4160. update(el, binding) {
  4161. const { value } = binding
  4162. if (value && typeof value === 'number') {
  4163. el.style.height = `${value}px`
  4164. } else {
  4165. el.style.height = 'auto'
  4166. }
  4167. },
  4168. componentUpdated(el) {
  4169. el.style.height = `${el.scrollHeight + 5}px`
  4170. },
  4171. },
  4172. },
  4173. computed: {
  4174. // rightBoxHeight: function () {
  4175. // return $(".rightBox")[0] ? $(".rightBox")[0].scrollHeight : 1000
  4176. // },
  4177. offsetLetfPx: function () {
  4178. //addnum可以直接在模板语法里面用,相当于data内的值
  4179. return (
  4180. $(".cru_select")[this.unitIndex] &&
  4181. $(".cru_select")[this.unitIndex].offsetLeft + 5
  4182. );
  4183. },
  4184. getMan2() {
  4185. return function (people) {
  4186. let _people = people;
  4187. let _people2 = "";
  4188. if (this.ManAarray.length) {
  4189. for (var i = 0; i < this.ManAarray.length; i++) {
  4190. if (this.ManAarray[i].userid == people) {
  4191. _people2 = this.ManAarray[i].name;
  4192. break;
  4193. }
  4194. }
  4195. }
  4196. if (people == this.courseUserid) {
  4197. return "";
  4198. }
  4199. return this.ManAarray.length ? _people2 : "";
  4200. };
  4201. },
  4202. getListMan2() {
  4203. return function (list) {
  4204. let _people2 = [];
  4205. if (this.ManAarray.length) {
  4206. for (var j = 0; j < list.length; j++) {
  4207. let people = list[j];
  4208. for (var i = 0; i < this.ManAarray.length; i++) {
  4209. if (this.ManAarray[i].userid == people && people != this.courseUserid) {
  4210. _people2.push(this.ManAarray[i].name);
  4211. break;
  4212. }
  4213. }
  4214. }
  4215. }
  4216. return this.ManAarray.length ? _people2.join("、") : "";
  4217. };
  4218. },
  4219. isInvite() {
  4220. return function (cid) {
  4221. let array = [];
  4222. for (var i = 0; i < this.inviteCode.length; i++) {
  4223. array.push(this.inviteCode[i].cid);
  4224. }
  4225. return array.indexOf(cid) != -1;
  4226. };
  4227. },
  4228. getInviteCodeC() {
  4229. return function (cid) {
  4230. let array = [];
  4231. for (var i = 0; i < this.inviteCode.length; i++) {
  4232. array.push(this.inviteCode[i].cid);
  4233. }
  4234. return this.inviteCode[array.indexOf(cid)].ic;
  4235. };
  4236. },
  4237. getClassC() {
  4238. return function (c) {
  4239. let _c2 = "";
  4240. if (this.grade.length) {
  4241. for (var i = 0; i < this.grade.length; i++) {
  4242. if (this.grade[i].id == c) {
  4243. _c2 = this.grade[i].name;
  4244. break;
  4245. }
  4246. }
  4247. }
  4248. return this.grade.length ? _c2 : "";
  4249. };
  4250. },
  4251. getListClassC() {
  4252. return function (list) {
  4253. let _c2 = [];
  4254. if (this.grade.length) {
  4255. for (var j = 0; j < list.length; j++) {
  4256. let c = list[j]
  4257. for (var i = 0; i < this.grade.length; i++) {
  4258. if (this.grade[i].id == c) {
  4259. _c2.push(this.grade[i].name);
  4260. break;
  4261. }
  4262. }
  4263. }
  4264. }
  4265. return this.grade.length ? _c2.join('、') : "";
  4266. };
  4267. },
  4268. },
  4269. watch: {
  4270. unitIndex(newValue, oldValue) {
  4271. if (this.isDelete == 2) {
  4272. this.isDelete = 1;
  4273. return;
  4274. }
  4275. if (this.cid != "") {
  4276. let _unitIndex = oldValue;
  4277. if (
  4278. JSON.stringify(this.unitJson2[_unitIndex]) ==
  4279. JSON.stringify(this.unitJson[_unitIndex])
  4280. ) {
  4281. this.$refs.rightboxR.scrollTop = 0;
  4282. return;
  4283. }
  4284. let cPan = 1;
  4285. for (
  4286. var j = 0;
  4287. j < this.unitJson[_unitIndex].chapterInfo[0].taskJson.length;
  4288. j++
  4289. ) {
  4290. this.unitJson[_unitIndex].chapterInfo[0].taskJson[
  4291. j
  4292. ].proVisible = false;
  4293. this.unitJson[_unitIndex].chapterInfo[0].taskJson[
  4294. j
  4295. ].proVisible2 = false;
  4296. if (
  4297. this.unitJson[_unitIndex].chapterInfo[0].taskJson[j].toolChoose
  4298. .length > 1
  4299. ) {
  4300. for (
  4301. var z = 0;
  4302. z <
  4303. this.unitJson[_unitIndex].chapterInfo[0].taskJson[j].toolChoose
  4304. .length;
  4305. z++
  4306. ) {
  4307. if (
  4308. !this.unitJson[_unitIndex].chapterInfo[0].taskJson[j]
  4309. .toolChoose[z].tool.length
  4310. ) {
  4311. this.$message.error("请把工具添加完整");
  4312. cPan = 2;
  4313. break;
  4314. }
  4315. }
  4316. }
  4317. if (this.unitJson[_unitIndex].chapterInfo[0].taskJson[j].eList) {
  4318. this.unitJson[_unitIndex].chapterInfo[0].taskJson[j].eList =
  4319. this.unitJson[_unitIndex].chapterInfo[0].taskJson[j].eList.filter(
  4320. (ele) => {
  4321. return ele.value != "";
  4322. }
  4323. );
  4324. }
  4325. }
  4326. if (cPan == 2) {
  4327. this.unitIndex = oldValue;
  4328. return;
  4329. }
  4330. for (var i = 0; i < this.unitJson.length; i++) {
  4331. if (this.addindex != i) {
  4332. delete this.unitJson[i].isUpdate;
  4333. }
  4334. }
  4335. this.$refs.rightboxR.scrollTop = 0;
  4336. this.addindex = -1;
  4337. let params = [
  4338. {
  4339. cid: this.cid,
  4340. chapters: JSON.stringify(this.unitJson),
  4341. uid: this.userid,
  4342. unitIndex: _unitIndex,
  4343. },
  4344. ];
  4345. this.ajax
  4346. .post(this.$store.state.api + "updateWorkNew4", params)
  4347. .then((res) => {
  4348. // this.$message({
  4349. // message: "修改成功",
  4350. // type: "success",
  4351. // });
  4352. // this.courseId = this.cid;
  4353. })
  4354. .catch((err) => {
  4355. this.$message.error("网络不佳");
  4356. console.error(err);
  4357. });
  4358. }
  4359. },
  4360. steps(newValue, old) {
  4361. if (newValue == 4) {
  4362. let cPan = 1;
  4363. for (var i = 0; i < this.unitJson.length; i++) {
  4364. for (
  4365. var j = 0;
  4366. j < this.unitJson[i].chapterInfo[0].taskJson.length;
  4367. j++
  4368. ) {
  4369. this.unitJson[i].chapterInfo[0].taskJson[j].proVisible = false;
  4370. this.unitJson[i].chapterInfo[0].taskJson[j].proVisible2 = false;
  4371. if (
  4372. this.unitJson[i].chapterInfo[0].taskJson[j].toolChoose.length > 1
  4373. ) {
  4374. for (
  4375. var z = 0;
  4376. z < this.unitJson[i].chapterInfo[0].taskJson[j].toolChoose.length;
  4377. z++
  4378. ) {
  4379. if (
  4380. !this.unitJson[i].chapterInfo[0].taskJson[j].toolChoose[z].tool
  4381. .length
  4382. ) {
  4383. this.$message.error("请把工具添加完整");
  4384. cPan = 2;
  4385. break;
  4386. }
  4387. }
  4388. }
  4389. if (this.unitJson[i].chapterInfo[0].taskJson[j].eList) {
  4390. this.unitJson[i].chapterInfo[0].taskJson[j].eList = this.unitJson[
  4391. i
  4392. ].chapterInfo[0].taskJson[j].eList.filter((ele) => {
  4393. return ele.value != "";
  4394. });
  4395. }
  4396. }
  4397. }
  4398. this.inputShow = true;
  4399. if (cPan == 2) {
  4400. this.steps = old;
  4401. return;
  4402. }
  4403. this.goTo(
  4404. "/course?userid=" +
  4405. this.userid +
  4406. "&oid=" +
  4407. this.oid +
  4408. "&org=" +
  4409. this.org +
  4410. "&role=" +
  4411. this.role
  4412. );
  4413. }
  4414. },
  4415. },
  4416. methods: {
  4417. tableRowClassName({ row, rowIndex }) {
  4418. if ((rowIndex + 1) % 2 === 0) {
  4419. return "even_row";
  4420. } else {
  4421. return "";
  4422. }
  4423. },
  4424. openAI() {
  4425. window.parent.postMessage({ tools: "64" }, "*");
  4426. },
  4427. setMan() {
  4428. // let teacherJuri = this.teacherJuri2;
  4429. this.ManAarray = [];
  4430. let _user = JSON.parse(JSON.stringify(this.checkboxList3));
  4431. if (_user.indexOf(this.userid) == -1) {
  4432. _user.push(this.userid);
  4433. }
  4434. if (_user.indexOf(this.courseUserid) == -1) {
  4435. _user.push(this.courseUserid);
  4436. }
  4437. let params = {
  4438. uid: _user.join(","),
  4439. };
  4440. this.ajax
  4441. .get(this.$store.state.api + "getAllUserById", params)
  4442. .then((res) => {
  4443. let teacherJuri = res.data[0];
  4444. this.ManAarray = teacherJuri;
  4445. })
  4446. .catch((err) => {
  4447. console.error(err);
  4448. });
  4449. },
  4450. previewImg(url) {
  4451. this.$hevueImgPreview(url);
  4452. },
  4453. btnDisplay(bool) {
  4454. this.isBtnDisplay = bool
  4455. },
  4456. stepDisplay(bool) {
  4457. this.isStepDisplay = bool
  4458. },
  4459. scrollChange() {
  4460. this.rightBoxHeight = $(".rightBox")[0].scrollHeight - 80;
  4461. },
  4462. addHw(e) {
  4463. var el = e.currentTarget;
  4464. el.getElementsByTagName("input")[0].click();
  4465. },
  4466. change(val) {
  4467. if (this.dialogVisible1) {
  4468. this.tdetail = val
  4469. } else if (this.dialogVisible6) {
  4470. this.AttText.text = val
  4471. } else if (this.dialogVisible2) {
  4472. this.cTemplate = val
  4473. } else if (this.dialogVisibleTable) {
  4474. this.tableJson.text = val
  4475. }
  4476. this.$forceUpdate();
  4477. console.log(val);
  4478. },
  4479. change2(val) {
  4480. console.log(val);
  4481. this.$forceUpdate();
  4482. },
  4483. handleClose(done) {
  4484. done();
  4485. },
  4486. closePan(tool) {
  4487. if (tool == 15) {
  4488. if (JSON.stringify(this.answerQ) == JSON.stringify(this.answerQ2)) {
  4489. this.dialogVisible8 = false
  4490. } else {
  4491. this.closeConfirm(tool);
  4492. }
  4493. } else if (tool == 4) {
  4494. if (JSON.stringify(this.askJson) == JSON.stringify(this.askJson2)) {
  4495. this.dialogVisible5 = false
  4496. } else {
  4497. this.closeConfirm(tool);
  4498. }
  4499. } else if (tool == 45) {
  4500. if (JSON.stringify(this.testJson) == JSON.stringify(this.testJson2)) {
  4501. this.dialogVisibleChoice = false
  4502. } else {
  4503. this.closeConfirm(tool);
  4504. }
  4505. } else if (tool == 41) {
  4506. if (JSON.stringify(this.selectJson) == JSON.stringify(this.selectJson2)) {
  4507. this.dialogVisibleSelect = false
  4508. } else {
  4509. this.closeConfirm(tool);
  4510. }
  4511. } else if (tool == 47) {
  4512. if (JSON.stringify(this.sentenceList) == JSON.stringify(this.sentenceList2)) {
  4513. this.dialogVisibleSentence = false
  4514. } else {
  4515. this.closeConfirm(tool);
  4516. }
  4517. }else if (tool == 69){
  4518. if (JSON.stringify(this.englishList) == JSON.stringify(this.englishList)) {
  4519. this.englishDialogVisible = false
  4520. } else {
  4521. this.closeConfirm(tool);
  4522. }
  4523. }
  4524. },
  4525. closeConfirm(tool) {
  4526. this
  4527. .$confirm("是否保存已编辑内容?", "提示", {
  4528. confirmButtonText: "保存",
  4529. cancelButtonText: "不保存",
  4530. type: "warning",
  4531. })
  4532. .then(() => {
  4533. if (tool == 15) {
  4534. this.addAnswer();
  4535. } else if (tool == 4) {
  4536. this.addAsk();
  4537. } else if (tool == 45) {
  4538. this.addTest();
  4539. } else if (tool == 41) {
  4540. this.addSelectAnswer();
  4541. } else if (tool == 47) {
  4542. this.addSentenceTool();
  4543. }else if(tool == 69){
  4544. this.addEnglish();
  4545. }
  4546. })
  4547. .catch(() => {
  4548. if (tool == 15) {
  4549. this.dialogVisible8 = false;
  4550. } else if (tool == 4) {
  4551. this.dialogVisible5 = false;
  4552. } else if (tool == 45) {
  4553. this.dialogVisibleChoice = false;
  4554. } else if (tool == 41) {
  4555. this.dialogVisibleSelect = false;
  4556. } else if (tool == 47) {
  4557. this.dialogVisibleSentence = false;
  4558. } else if (tool == 69) {
  4559. this.englishDialogVisible = false;
  4560. }
  4561. });
  4562. },
  4563. addEnglish(){
  4564. if(this.englishList.engTitle == "" || this.englishList.englishText == ""){
  4565. this.$message.error("请将内容填写完整!");
  4566. return;
  4567. }
  4568. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  4569. this.taskCount
  4570. ].toolChoose[this.toolIndex].englishList = this.englishList;
  4571. this.englishList = {};
  4572. this.englishDialogVisible = false;
  4573. if (
  4574. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[this.taskCount]
  4575. .toolChoose[this.toolIndex].tool != 69
  4576. ) {
  4577. this.addTools(69, this.taskCount, this.toolIndex);
  4578. }
  4579. },
  4580. setEnglishList(engList){
  4581. this.englishList = engList;
  4582. },
  4583. imgChange2(i, j) {
  4584. var _tmp = this.testJson.testJson[i].checkList[j];
  4585. this.noneBtnImg = _tmp.length >= 1;
  4586. },
  4587. imgChange3(i) {
  4588. var _tmp = this.testJson.testJson[i];
  4589. this.noneBtnImg = _tmp.length >= 1;
  4590. },
  4591. imgChange1(file, fileList, type, itemTaskIndex) {
  4592. if (type == 1) {
  4593. var _tmp = this.cover;
  4594. } else if (
  4595. type == 2 ||
  4596. type == 3 ||
  4597. type == 6 ||
  4598. type == 7 ||
  4599. type == 8
  4600. ) {
  4601. var _tmp =
  4602. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  4603. .chapterData;
  4604. } else if (type == 4) {
  4605. var _tmp = this.unitJson[this.unitIndex].chapterInfo[0].fileList1;
  4606. } else {
  4607. var _tmp =
  4608. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  4609. .homeworkList;
  4610. }
  4611. this.noneBtnImg = _tmp.length >= 1;
  4612. },
  4613. goTo(path) {
  4614. this.$router.push(path);
  4615. },
  4616. guid() {
  4617. var _num,
  4618. i,
  4619. _guid = "";
  4620. for (i = 0; i < 32; i++) {
  4621. _guid += Math.floor(Math.random() * 16).toString(16); //随机0 - 16 的数字 转变为16进制的字符串
  4622. _num = Math.floor((i - 7) / 4); //计算 (i-7)除4
  4623. if (_num > -1 && _num < 4 && i == 7 + 4 * _num) {
  4624. //会使guid中间加 "-" 形式为xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
  4625. _guid += "-";
  4626. }
  4627. }
  4628. return _guid;
  4629. },
  4630. retrunCourse() {
  4631. this
  4632. .$confirm("是否保存已编辑内容?", "提示", {
  4633. confirmButtonText: "保存",
  4634. cancelButtonText: "不保存",
  4635. distinguishCancelAndClose: true,
  4636. type: "warning",
  4637. })
  4638. .then(() => {
  4639. if (this.cid == "" || this.cid == undefined) {
  4640. if (this.courseName == "") {
  4641. this.$message.error("请补充填写课程名称");
  4642. return;
  4643. } else {
  4644. this.addWork();
  4645. }
  4646. this.steps = 4
  4647. } else {
  4648. if (this.courseName == "") {
  4649. this.$message.error("请补充填写课程名称");
  4650. return;
  4651. } else {
  4652. if (this.userid != this.courseUserid && this.role != "1") {
  4653. this.updateWork2();
  4654. } else {
  4655. this.updateWork();
  4656. }
  4657. this.steps = 4
  4658. }
  4659. }
  4660. })
  4661. .catch((v) => {
  4662. console.log(v)
  4663. if(v == "cancel"){
  4664. this.goTo(
  4665. "/course?userid=" +
  4666. this.userid +
  4667. "&oid=" +
  4668. this.oid +
  4669. "&org=" +
  4670. this.org +
  4671. "&role=" +
  4672. this.role
  4673. );
  4674. }
  4675. });
  4676. },
  4677. lastSteps() {
  4678. if (this.steps == 4) {
  4679. this.goTo(
  4680. "/course?userid=" +
  4681. this.userid +
  4682. "&oid=" +
  4683. this.oid +
  4684. "&org=" +
  4685. this.org +
  4686. "&role=" +
  4687. this.role
  4688. );
  4689. } else {
  4690. // if (this.cidType == 0) {
  4691. // this.steps--;
  4692. // if (this.steps == 1) {
  4693. // setTimeout(() => {
  4694. // this.checkEva(this.checkId);
  4695. // setTimeout(() => {
  4696. // this.checkEva(this.checkId);
  4697. // }, 100);
  4698. // }, 100);
  4699. // }
  4700. // } else {
  4701. if (this.steps == 3) {
  4702. this.steps = 1;
  4703. setTimeout(() => {
  4704. this.checkEva(this.checkId);
  4705. setTimeout(() => {
  4706. this.checkEva(this.checkId);
  4707. }, 100);
  4708. }, 100);
  4709. }
  4710. // }
  4711. }
  4712. },
  4713. navSteps(s) {
  4714. if (this.courseName == "") {
  4715. this.$message.error("请补充填写课程名称");
  4716. return;
  4717. }
  4718. if (this.cidType == 0) {
  4719. if (this.steps == 1) {
  4720. if (this.cid == "" || this.cid == undefined) {
  4721. this.addWork();
  4722. } else {
  4723. if (this.userid != this.courseUserid && this.role != "1") {
  4724. // this.updateWork2();
  4725. } else {
  4726. this.updateWork();
  4727. }
  4728. }
  4729. }
  4730. if (s == 1) {
  4731. this.steps = 1;
  4732. setTimeout(() => {
  4733. this.checkEva(this.checkId);
  4734. setTimeout(() => {
  4735. this.checkEva(this.checkId);
  4736. }, 100);
  4737. }, 100);
  4738. }
  4739. if (s == 2) {
  4740. this.steps = 2;
  4741. }
  4742. if (s == 3) {
  4743. this.cTemplate = this.templateC.content;
  4744. this.dialogVisible2 = false;
  4745. this.steps = 3;
  4746. this.isClickColor = 1
  4747. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[0].toolOpen = true
  4748. this.$forceUpdate();
  4749. setTimeout(() => {
  4750. this.checkEva(this.checkId);
  4751. setTimeout(() => {
  4752. this.checkEva(this.checkId);
  4753. }, 100);
  4754. }, 1000);
  4755. }
  4756. } else {
  4757. if (this.steps == 1) {
  4758. if (this.cid == "" || this.cid == undefined) {
  4759. this.addWork();
  4760. } else {
  4761. if (this.userid != this.courseUserid && this.role != "1") {
  4762. // this.updateWork2();
  4763. } else {
  4764. this.updateWork();
  4765. }
  4766. }
  4767. }
  4768. if (s == 1) {
  4769. this.steps = 1;
  4770. setTimeout(() => {
  4771. this.checkEva(this.checkId);
  4772. setTimeout(() => {
  4773. this.checkEva(this.checkId);
  4774. }, 100);
  4775. }, 100);
  4776. }
  4777. if (s == 3) {
  4778. this.cTemplate = this.templateC.content;
  4779. this.dialogVisible2 = false;
  4780. this.steps = 3;
  4781. this.isClickColor = 1
  4782. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[0].toolOpen = true
  4783. this.$forceUpdate();
  4784. setTimeout(() => {
  4785. this.checkEva(this.checkId);
  4786. setTimeout(() => {
  4787. this.checkEva(this.checkId);
  4788. }, 100);
  4789. }, 1000);
  4790. }
  4791. }
  4792. this.$refs.stepBox.scrollTop = 0;
  4793. },
  4794. nextSteps() {
  4795. // if (this.cidType == 1) {
  4796. if (this.steps == 1) {
  4797. if (this.courseName != "") {
  4798. this.steps = 3;
  4799. this.isClickColor = 1
  4800. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[0].toolOpen = true
  4801. this.$forceUpdate();
  4802. setTimeout(() => {
  4803. this.checkEva(this.checkId);
  4804. setTimeout(() => {
  4805. this.checkEva(this.checkId);
  4806. }, 100);
  4807. }, 1000);
  4808. if (this.cid == "" || this.cid == undefined) {
  4809. this.addWork();
  4810. } else {
  4811. if (this.userid != this.courseUserid && this.role != "1") {
  4812. // this.updateWork2();
  4813. } else {
  4814. this.updateWork();
  4815. }
  4816. }
  4817. } else {
  4818. this.$message.error("请补充填写课程名称");
  4819. return;
  4820. }
  4821. } else if (this.steps == 3) {
  4822. if (this.cid == "" || this.cid == undefined) {
  4823. if (this.courseName == "") {
  4824. this.$message.error("请补充填写课程名称");
  4825. return;
  4826. } else {
  4827. this.addWork();
  4828. this.steps++;
  4829. }
  4830. } else {
  4831. if (this.courseName == "") {
  4832. this.$message.error("请补充填写课程名称");
  4833. return;
  4834. } else {
  4835. if (this.userid != this.courseUserid && this.role != "1") {
  4836. this.updateWork2();
  4837. } else {
  4838. this.updateWork();
  4839. }
  4840. this.steps++;
  4841. }
  4842. }
  4843. }
  4844. // } else {
  4845. // if (this.steps == 1) {
  4846. // if (this.courseName != "") {
  4847. // if (this.cid == "" || this.cid == undefined) {
  4848. // this.addWork();
  4849. // } else {
  4850. // if (this.userid != this.courseUserid && this.role != "1") {
  4851. // // this.updateWork2();
  4852. // } else {
  4853. // this.updateWork();
  4854. // }
  4855. // }
  4856. // this.steps++;
  4857. // } else {
  4858. // this.$message.error("请补充填写课程名称");
  4859. // return;
  4860. // }
  4861. // } else if (this.steps == 2) {
  4862. // if (this.templateC.id != "" || this.templateC.id != undefined) {
  4863. // this.cTemplate = this.templateC.content;
  4864. // }
  4865. // this.dialogVisible2 = false;
  4866. // this.steps++;
  4867. // setTimeout(() => {
  4868. // this.checkEva(this.checkId);
  4869. // setTimeout(() => {
  4870. // this.checkEva(this.checkId);
  4871. // }, 100);
  4872. // }, 1000);
  4873. // } else if (this.steps == 3) {
  4874. // if (this.cid == "" || this.cid == undefined) {
  4875. // if (this.courseName == "") {
  4876. // this.$message.error("请补充填写课程名称");
  4877. // return;
  4878. // } else {
  4879. // this.addWork();
  4880. // this.steps++;
  4881. // }
  4882. // } else {
  4883. // if (this.courseName == "") {
  4884. // this.$message.error("请补充填写课程名称");
  4885. // return;
  4886. // } else {
  4887. // if (this.userid != this.courseUserid && this.role != "1") {
  4888. // this.updateWork2();
  4889. // } else {
  4890. // this.updateWork();
  4891. // }
  4892. // this.steps++;
  4893. // }
  4894. // }
  4895. // }
  4896. // }
  4897. this.$refs.stepBox.scrollTop = 0;
  4898. },
  4899. unitSet(i) {
  4900. if(this.unitIndex == i){
  4901. return;
  4902. }
  4903. this.unitIndex = i;
  4904. this.isClickColor = 1
  4905. // this.$refs.rightboxR.scrollTop = 0;
  4906. this.$refs.unitBox.scrollTop = 0
  4907. },
  4908. panUnitJson(){
  4909. let _unitIndex = this.unitIndex;
  4910. let cPan = 1;
  4911. for (
  4912. var j = 0;
  4913. j < this.unitJson[_unitIndex].chapterInfo[0].taskJson.length;
  4914. j++
  4915. ) {
  4916. this.unitJson[_unitIndex].chapterInfo[0].taskJson[
  4917. j
  4918. ].proVisible = false;
  4919. this.unitJson[_unitIndex].chapterInfo[0].taskJson[
  4920. j
  4921. ].proVisible2 = false;
  4922. if (
  4923. this.unitJson[_unitIndex].chapterInfo[0].taskJson[j].toolChoose
  4924. .length > 1
  4925. ) {
  4926. for (
  4927. var z = 0;
  4928. z <
  4929. this.unitJson[_unitIndex].chapterInfo[0].taskJson[j].toolChoose
  4930. .length;
  4931. z++
  4932. ) {
  4933. if (
  4934. !this.unitJson[_unitIndex].chapterInfo[0].taskJson[j]
  4935. .toolChoose[z].tool.length
  4936. ) {
  4937. this.$message.error("请把工具添加完整");
  4938. cPan = 2;
  4939. break;
  4940. }
  4941. }
  4942. }
  4943. if (this.unitJson[_unitIndex].chapterInfo[0].taskJson[j].eList) {
  4944. this.unitJson[_unitIndex].chapterInfo[0].taskJson[j].eList =
  4945. this.unitJson[_unitIndex].chapterInfo[0].taskJson[j].eList.filter(
  4946. (ele) => {
  4947. return ele.value != "";
  4948. }
  4949. );
  4950. }
  4951. }
  4952. return cPan;
  4953. },
  4954. unitSet2(i) {
  4955. if(this.panUnitJson() == 2){
  4956. return;
  4957. }
  4958. if(this.unitJson[i].toolOpen){
  4959. this.unitJson[i].toolOpen = false
  4960. this.updateWork()
  4961. this.$forceUpdate()
  4962. return
  4963. }else {
  4964. this.unitJson[i].toolOpen = true
  4965. }
  4966. this.$forceUpdate()
  4967. if(this.unitIndex == i){
  4968. return;
  4969. }
  4970. this.unitIndex = i;
  4971. this.isClickColor = 1
  4972. // this.$refs.rightboxR.scrollTop = 0;
  4973. this.$refs.unitBox.scrollTop = 0
  4974. },
  4975. updateCourseState(i){
  4976. let params = [
  4977. {
  4978. cid: this.cid,
  4979. state: i,
  4980. },
  4981. ];
  4982. this.ajax
  4983. .post(this.$store.state.api + "updateCourseMode", params)
  4984. .then((res) => {
  4985. this.courseState = i
  4986. })
  4987. .catch((err) => {
  4988. this.$message.error("网络不佳");
  4989. console.error(err);
  4990. });
  4991. },
  4992. time() {
  4993. if (!this.now) {
  4994. this.now = new Date().getTime();
  4995. return true;
  4996. } else {
  4997. let time = new Date().getTime();
  4998. if (time - this.now > 3000) {
  4999. this.now = time;
  5000. return true;
  5001. } else {
  5002. return false;
  5003. }
  5004. }
  5005. },
  5006. deleteUnit(i) {
  5007. var _this = this;
  5008. if(i == 0 && _this.unitJson.length == 1){
  5009. _this
  5010. .$confirm("确定切换成任务模式吗?", "提示", {
  5011. confirmButtonText: "确定",
  5012. cancelButtonText: "取消",
  5013. type: "warning",
  5014. })
  5015. .then(() => {
  5016. _this.unitJson[i].dyName = ''
  5017. _this.updateCourseState(2)
  5018. })
  5019. .catch(() => {
  5020. return;
  5021. });
  5022. }else {
  5023. _this
  5024. .$confirm("确定删除此阶段吗?", "提示", {
  5025. confirmButtonText: "确定",
  5026. cancelButtonText: "取消",
  5027. type: "warning",
  5028. })
  5029. .then(() => {
  5030. _this.isDelete = 2;
  5031. // _this.unitIndex = _this.unitIndex - 1;
  5032. _this.deleteWork(_this.unitJson[i].chapterInfo[0].chapterid);
  5033. // _this.$message.success("删除成功");
  5034. })
  5035. .catch(() => {
  5036. return;
  5037. });
  5038. }
  5039. },
  5040. deleteWork(chapid) {
  5041. let params = [
  5042. {
  5043. cid: this.cid,
  5044. chapters: JSON.stringify(this.unitJson),
  5045. uid: this.userid,
  5046. chapid: chapid,
  5047. },
  5048. ];
  5049. this.ajax
  5050. .post(this.$store.state.api + "deleteWork", params)
  5051. .then((res) => {
  5052. this.$message({
  5053. message: "删除成功",
  5054. type: "success",
  5055. });
  5056. let task = JSON.parse(JSON.stringify(this.unitJson[this.unitIndex].chapterInfo[0].taskJson))
  5057. this.unitJson.splice(this.unitIndex, 1);
  5058. if(this.unitIndex == 0){
  5059. this.unitIndex = 0;
  5060. }else{
  5061. this.unitIndex = this.unitIndex - 1;
  5062. }
  5063. if(JSON.stringify(task) != JSON.stringify(this.taskJSONa)){
  5064. this.unitJson[this.unitIndex].chapterInfo[0].taskJson = [...this.unitJson[this.unitIndex].chapterInfo[0].taskJson, ...task]
  5065. }
  5066. })
  5067. .catch((err) => {
  5068. this.$message.error("网络不佳");
  5069. console.error(err);
  5070. });
  5071. },
  5072. deleteTool(itemTaskIndex, i) {
  5073. var _this = this;
  5074. if (_this.time()) {
  5075. _this
  5076. .$confirm("确定删除此工具吗?", "提示", {
  5077. confirmButtonText: "确定",
  5078. cancelButtonText: "取消",
  5079. type: "warning",
  5080. })
  5081. .then(() => {
  5082. _this.unitJson[_this.unitIndex].chapterInfo[0].taskJson[
  5083. itemTaskIndex
  5084. ].toolChoose.splice(i, 1);
  5085. _this.$message.success("删除成功");
  5086. })
  5087. .catch(() => {
  5088. return;
  5089. });
  5090. }
  5091. },
  5092. deleteSentence(i) {
  5093. var _this = this;
  5094. _this
  5095. .$confirm("确定删除此题目吗?", "提示", {
  5096. confirmButtonText: "确定",
  5097. cancelButtonText: "取消",
  5098. type: "warning",
  5099. })
  5100. .then(() => {
  5101. _this.sentenceList.splice(i, 1);
  5102. _this.$message.success("删除成功");
  5103. })
  5104. .catch(() => {
  5105. return;
  5106. });
  5107. },
  5108. deleteS(s, i, j) {
  5109. this.sentenceList[i].addSentence.splice(j, 1);
  5110. if (this.sentenceList[i].rightAnswer.indexOf(s) != -1) {
  5111. var a = this.sentenceList[i].rightAnswer.indexOf(s);
  5112. this.sentenceList[i].rightAnswer.splice(a, 1);
  5113. }
  5114. },
  5115. openT() {
  5116. window.parent.postMessage({ tools: "25" }, "*");
  5117. },
  5118. deleteTask(i) {
  5119. var _this = this;
  5120. if (_this.time()) {
  5121. _this
  5122. .$confirm(
  5123. _this.unitJson[_this.unitIndex].chapterInfo[0].taskJson.length -
  5124. 1 ==
  5125. i
  5126. ? "确定删除此任务吗?"
  5127. : "切换任务顺序将删除所有工具的提交成果,是否继续此操作?",
  5128. "提示",
  5129. {
  5130. confirmButtonText: "确定",
  5131. cancelButtonText: "取消",
  5132. type: "warning",
  5133. }
  5134. )
  5135. .then(() => {
  5136. _this.unitJson[_this.unitIndex].chapterInfo[0].taskJson.splice(
  5137. i,
  5138. 1
  5139. );
  5140. _this.$message.success("删除成功");
  5141. })
  5142. .catch(() => {
  5143. return;
  5144. });
  5145. }
  5146. },
  5147. handlePictureCardPreview(file) {
  5148. this.dialogImageUrl = file.url;
  5149. },
  5150. clean(i, c) {
  5151. this.unitJson[this.unitIndex].chapterInfo[i].fileList1.splice(c, 1);
  5152. },
  5153. handle_remove1(file, fileList, type) {
  5154. var _tmp = this.cover;
  5155. // for (var i = 0, len = _tmp.length; i < len; i++) {
  5156. // if (_tmp[i].uid == file.uid) {
  5157. // _tmp.splice(i, 1);
  5158. // break;
  5159. // }
  5160. // this.cover = _tmp;
  5161. // }
  5162. this.cover = [];
  5163. this.noneBtnImg = this.cover.length >= 1;
  5164. this.isSysPic = false;
  5165. this.isSysPic2 = false;
  5166. this.$forceUpdate();
  5167. },
  5168. addImg(e) {
  5169. var el = e.currentTarget;
  5170. el.getElementsByTagName("input")[0].click();
  5171. e.target.value = "";
  5172. },
  5173. addChaptersTools(i) {
  5174. this.chapTools = [
  5175. {
  5176. tools: [],
  5177. toolDetail: "",
  5178. },
  5179. ];
  5180. this.chapCount = i;
  5181. this.dialogVisible4 = true;
  5182. },
  5183. isNoFinsh() {
  5184. this.$message.warning("功能正在开发中");
  5185. },
  5186. addAttText(i) {
  5187. this.AttText = {
  5188. title: "",
  5189. text: "",
  5190. };
  5191. this.taskCount = i;
  5192. this.AttTextType = 0;
  5193. this.$forceUpdate();
  5194. this.dialogVisible6 = true;
  5195. setTimeout(() => {
  5196. this.$refs['fuInput'].focus();
  5197. }, 100);
  5198. },
  5199. openLine(i) {
  5200. this.line = "";
  5201. this.lineCount = i;
  5202. this.lineType = 0;
  5203. this.$forceUpdate();
  5204. this.dialogVisible7 = true;
  5205. },
  5206. pasteLine(i) {
  5207. navigator.clipboard
  5208. .readText()
  5209. .then((v) => {
  5210. console.log("获取剪贴板成功:", v);
  5211. const html = v;
  5212. const regex = /src="(.*?)"/g;
  5213. const match = regex.exec(html);
  5214. if (match && match[1]) {
  5215. console.log(match[1]);
  5216. this.$message.success("粘贴成功");
  5217. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  5218. i
  5219. ].chapterData.push({
  5220. name: "链接",
  5221. title: "嵌入代码",
  5222. url: match[1],
  5223. type: 8,
  5224. });
  5225. } else {
  5226. // console.log("未找到包含 src 属性的 iframe");
  5227. this.$message.error("系统没有找到粘贴对象,请首先复制可用于粘贴的链接。");
  5228. }
  5229. })
  5230. .catch((v) => {
  5231. console.log("获取剪贴板失败: ", v);
  5232. });
  5233. },
  5234. openSource(i) {
  5235. this.lineCount = i;
  5236. this.sourceData = {};
  5237. this.dialogVisibleSource = true;
  5238. this.updateSourcePan = false;
  5239. },
  5240. addSource() {
  5241. if (!Object.keys(this.sourceData).length) {
  5242. this.$message.error("请选择要上传的资源");
  5243. return;
  5244. }
  5245. let keys = Object.keys(this.sourceData);
  5246. for (var i = 0; i < keys.length; i++) {
  5247. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  5248. this.lineCount
  5249. ].chapterData.push({
  5250. name: "链接",
  5251. title: this.sourceData[keys[i]].name,
  5252. url: this.sourceData[keys[i]].url,
  5253. type: 14,
  5254. id: keys[i]
  5255. });
  5256. }
  5257. this.$forceUpdate();
  5258. this.dialogVisibleSource = false;
  5259. },
  5260. updateSource() {
  5261. if (!Object.keys(this.sourceData).length) {
  5262. this.$message.error("请选择要上传的资源");
  5263. return;
  5264. }
  5265. let keys = Object.keys(this.sourceData);
  5266. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  5267. this.taskCount
  5268. ].chapterData[this.lineCount].url = this.sourceData[keys[0]].url;
  5269. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  5270. this.taskCount
  5271. ].chapterData[this.lineCount].title = this.sourceData[keys[0]].name;
  5272. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  5273. this.taskCount
  5274. ].chapterData[this.lineCount].id = keys[0];
  5275. this.updateSourcePan = false;
  5276. this.$forceUpdate();
  5277. this.dialogVisibleSource = false;
  5278. },
  5279. deleteM(i, j) {
  5280. this.testJson.testJson[i].timuList.splice(j, 1);
  5281. },
  5282. beforeUploadTiMu(event, i) {
  5283. const loading = this.openLoading();
  5284. var file = event.target.files[0];
  5285. var credentials = {
  5286. accessKeyId: "AKIATLPEDU37QV5CHLMH",
  5287. secretAccessKey: "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",
  5288. }; //秘钥形式的登录上传
  5289. window.AWS.config.update(credentials);
  5290. window.AWS.config.region = "cn-northwest-1"; //设置区域
  5291. var bucket = new window.AWS.S3({ params: { Bucket: "ccrb" } }); //选择桶
  5292. var _this = this;
  5293. if (file) {
  5294. var params = {
  5295. Key:
  5296. file.name.split(".")[0] +
  5297. new Date().getTime() +
  5298. "." +
  5299. file.name.split(".")[file.name.split(".").length - 1],
  5300. ContentType: file.type,
  5301. Body: file,
  5302. "Access-Control-Allow-Credentials": "*",
  5303. ACL: "public-read",
  5304. }; //key可以设置为桶的相抵路径,Body为文件, ACL最好要设置
  5305. var options = {
  5306. partSize: 2048 * 1024 * 1024,
  5307. queueSize: 2,
  5308. leavePartsOnError: true,
  5309. };
  5310. bucket
  5311. .upload(params, options)
  5312. .on("httpUploadProgress", function (evt) {
  5313. //这里可以写进度条
  5314. // console.log("Uploaded : " + parseInt((evt.loaded * 80) / evt.total) + '%');
  5315. })
  5316. .send(function (err, data) {
  5317. loading.close();
  5318. if (err) {
  5319. _this.$message.error("上传失败");
  5320. } else {
  5321. if (_this.testJson.testJson[i].timuList) {
  5322. _this.testJson.testJson[i].timuList.push({
  5323. src: data.Location,
  5324. });
  5325. } else {
  5326. _this.testJson.testJson[i].timuList = [];
  5327. _this.testJson.testJson[i].timuList.push({
  5328. src: data.Location,
  5329. });
  5330. }
  5331. _this.imgChange3(i);
  5332. _this.$forceUpdate();
  5333. }
  5334. });
  5335. }
  5336. },
  5337. beforeUploadTi(event, i, j) {
  5338. const loading = this.openLoading();
  5339. var file = event.target.files[0];
  5340. var credentials = {
  5341. accessKeyId: "AKIATLPEDU37QV5CHLMH",
  5342. secretAccessKey: "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",
  5343. }; //秘钥形式的登录上传
  5344. window.AWS.config.update(credentials);
  5345. window.AWS.config.region = "cn-northwest-1"; //设置区域
  5346. var bucket = new window.AWS.S3({ params: { Bucket: "ccrb" } }); //选择桶
  5347. var _this = this;
  5348. if (file) {
  5349. var params = {
  5350. Key:
  5351. file.name.split(".")[0] +
  5352. new Date().getTime() +
  5353. "." +
  5354. file.name.split(".")[file.name.split(".").length - 1],
  5355. ContentType: file.type,
  5356. Body: file,
  5357. "Access-Control-Allow-Credentials": "*",
  5358. ACL: "public-read",
  5359. }; //key可以设置为桶的相抵路径,Body为文件, ACL最好要设置
  5360. var options = {
  5361. partSize: 2048 * 1024 * 1024,
  5362. queueSize: 2,
  5363. leavePartsOnError: true,
  5364. };
  5365. bucket
  5366. .upload(params, options)
  5367. .on("httpUploadProgress", function (evt) {
  5368. //这里可以写进度条
  5369. // console.log("Uploaded : " + parseInt((evt.loaded * 80) / evt.total) + '%');
  5370. })
  5371. .send(function (err, data) {
  5372. loading.close();
  5373. if (err) {
  5374. _this.$message.error("上传失败");
  5375. } else {
  5376. _this.testJson.testJson[i].checkList[j] = {};
  5377. _this.testJson.testJson[i].checkList[j].src = data.Location;
  5378. _this.testJson.testJson[i].checkList[j].imgType = 1;
  5379. _this.imgChange2(i, j);
  5380. _this.$forceUpdate();
  5381. }
  5382. });
  5383. }
  5384. },
  5385. beforeUpload1(event, type) {
  5386. // const loading = this.openLoading();
  5387. var file = event.target.files[0];
  5388. var credentials = {
  5389. accessKeyId: "AKIATLPEDU37QV5CHLMH",
  5390. secretAccessKey: "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",
  5391. }; //秘钥形式的登录上传
  5392. window.AWS.config.update(credentials);
  5393. window.AWS.config.region = "cn-northwest-1"; //设置区域
  5394. var bucket = new window.AWS.S3({ params: { Bucket: "ccrb" } }); //选择桶
  5395. var _this = this;
  5396. if (file) {
  5397. var params = {
  5398. Key:
  5399. file.name.split(".")[0] +
  5400. new Date().getTime() +
  5401. "." +
  5402. file.name.split(".")[file.name.split(".").length - 1],
  5403. ContentType: file.type,
  5404. Body: file,
  5405. "Access-Control-Allow-Credentials": "*",
  5406. ACL: "public-read",
  5407. }; //key可以设置为桶的相抵路径,Body为文件, ACL最好要设置
  5408. var options = {
  5409. partSize: 2048 * 1024 * 1024,
  5410. queueSize: 2,
  5411. leavePartsOnError: true,
  5412. };
  5413. bucket
  5414. .upload(params, options)
  5415. .on("httpUploadProgress", function (evt) {
  5416. //这里可以写进度条
  5417. // console.log("Uploaded : " + parseInt((evt.loaded * 80) / evt.total) + '%');
  5418. })
  5419. .send(function (err, data) {
  5420. // loading.close();
  5421. if (err) {
  5422. // var a = _this.$refs.upload1.uploadFiles;
  5423. // a.splice(a.length - 1, a.length);
  5424. _this.$message.error("上传失败");
  5425. } else {
  5426. _this.cover.push({
  5427. name: file.name,
  5428. url: data.Location,
  5429. uid: file.uid,
  5430. });
  5431. _this.imgChange1(null, null, 1, null);
  5432. _this.choosePicVisible = false;
  5433. console.log(data.Location);
  5434. }
  5435. });
  5436. }
  5437. },
  5438. beforeUploadSelect(event, type) {
  5439. // const loading = this.openLoading();
  5440. var file = event.target.files[0];
  5441. var credentials = {
  5442. accessKeyId: "AKIATLPEDU37QV5CHLMH",
  5443. secretAccessKey: "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",
  5444. }; //秘钥形式的登录上传
  5445. window.AWS.config.update(credentials);
  5446. window.AWS.config.region = "cn-northwest-1"; //设置区域
  5447. var bucket = new window.AWS.S3({ params: { Bucket: "ccrb" } }); //选择桶
  5448. var _this = this;
  5449. if (file) {
  5450. var params = {
  5451. Key:
  5452. file.name.split(".")[0] +
  5453. new Date().getTime() +
  5454. "." +
  5455. file.name.split(".")[file.name.split(".").length - 1],
  5456. ContentType: file.type,
  5457. Body: file,
  5458. "Access-Control-Allow-Credentials": "*",
  5459. ACL: "public-read",
  5460. }; //key可以设置为桶的相抵路径,Body为文件, ACL最好要设置
  5461. var options = {
  5462. partSize: 2048 * 1024 * 1024,
  5463. queueSize: 2,
  5464. leavePartsOnError: true,
  5465. };
  5466. bucket
  5467. .upload(params, options)
  5468. .on("httpUploadProgress", function (evt) {
  5469. //这里可以写进度条
  5470. // console.log("Uploaded : " + parseInt((evt.loaded * 80) / evt.total) + '%');
  5471. })
  5472. .send(function (err, data) {
  5473. // loading.close();
  5474. if (err) {
  5475. _this.$message.error("上传失败");
  5476. } else {
  5477. _this.selectJson.url = data.Location;
  5478. console.log(data.Location);
  5479. }
  5480. });
  5481. }
  5482. },
  5483. chooseSysPic(p) {
  5484. this.cover = []
  5485. setTimeout(() => {
  5486. this.cover[0] = {
  5487. name: "系统图片.png",
  5488. url: p,
  5489. };
  5490. this.imgChange1(null, null, 1, null);
  5491. this.$forceUpdate();
  5492. }, 0);
  5493. this.isSysPic = true;
  5494. this.isSysPic2 = false;
  5495. this.sysPicVisible = false;
  5496. this.$forceUpdate();
  5497. },
  5498. chooseSysPic2(p) {
  5499. this.cover = []
  5500. setTimeout(() => {
  5501. this.cover[0] = {
  5502. name: "网络图片.png",
  5503. url: p,
  5504. };
  5505. this.imgChange1(null, null, 1, null);
  5506. this.$forceUpdate();
  5507. }, 0);
  5508. this.isSysPic2 = true;
  5509. this.isSysPic = false;
  5510. this.sysPicVisible2 = false;
  5511. this.$forceUpdate();
  5512. },
  5513. beforeUpload(data) {
  5514. this.$refs.upload1.uploadFiles;
  5515. this.uploadLoading1 = true;
  5516. var file = data.file;
  5517. var credentials = {
  5518. accessKeyId: "AKIATLPEDU37QV5CHLMH",
  5519. secretAccessKey: "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",
  5520. }; //秘钥形式的登录上传
  5521. window.AWS.config.update(credentials);
  5522. window.AWS.config.region = "cn-northwest-1"; //设置区域
  5523. var bucket = new window.AWS.S3({ params: { Bucket: "ccrb" } }); //选择桶
  5524. var _this = this;
  5525. if (file) {
  5526. var params = {
  5527. Key:
  5528. file.name.split(".")[0] +
  5529. new Date().getTime() +
  5530. "." +
  5531. file.name.split(".")[file.name.split(".").length - 1],
  5532. ContentType: file.type,
  5533. Body: file,
  5534. "Access-Control-Allow-Credentials": "*",
  5535. ACL: "public-read",
  5536. }; //key可以设置为桶的相抵路径,Body为文件, ACL最好要设置
  5537. var options = {
  5538. partSize: 2048 * 1024 * 1024,
  5539. queueSize: 2,
  5540. leavePartsOnError: true,
  5541. };
  5542. bucket
  5543. .upload(params, options)
  5544. .on("httpUploadProgress", function (evt) {
  5545. //这里可以写进度条
  5546. // console.log("Uploaded : " + parseInt((evt.loaded * 80) / evt.total) + '%');
  5547. })
  5548. .send(function (err, data) {
  5549. _this.uploadLoading1 = false;
  5550. if (err) {
  5551. // var a = _this.$refs.upload1.uploadFiles;
  5552. // a.splice(a.length - 1, a.length);
  5553. _this.$message.error("上传失败");
  5554. } else {
  5555. //上传成功处理
  5556. _this.unitJson[_this.unitIndex].chapterInfo[0].fileList1.push({
  5557. name: file.name,
  5558. url: data.Location,
  5559. uid: file.uid,
  5560. });
  5561. _this.imgChange();
  5562. console.log(data.Location);
  5563. }
  5564. });
  5565. }
  5566. },
  5567. onExceed() {
  5568. this.$message.error("课程封面仅支持上传一张,请删除后再进行上传");
  5569. },
  5570. beforeUpload2(event, unitIndex, type, itemTaskIndex) {
  5571. // const loading = this.openLoading();
  5572. var file = event.target.files[0];
  5573. var credentials = {
  5574. accessKeyId: "AKIATLPEDU37QV5CHLMH",
  5575. secretAccessKey: "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",
  5576. }; //秘钥形式的登录上传
  5577. window.AWS.config.update(credentials);
  5578. window.AWS.config.region = "cn-northwest-1"; //设置区域
  5579. var bucket = new window.AWS.S3({ params: { Bucket: "ccrb" } }); //选择桶
  5580. var _this = this;
  5581. if (type == 3) {
  5582. var b = [
  5583. "DOC",
  5584. "DOCX",
  5585. "DOCM",
  5586. "DOTM",
  5587. "DOTX",
  5588. "PPTX",
  5589. "PPSX",
  5590. "PPT",
  5591. "PPS",
  5592. "PPTM",
  5593. "POTM",
  5594. "PPAM",
  5595. "POTX",
  5596. "PPSM",
  5597. ];
  5598. if (
  5599. b.indexOf(
  5600. file.name
  5601. .split(".")
  5602. [file.name.split(".").length - 1].toLocaleUpperCase()
  5603. ) != -1
  5604. ) {
  5605. if (file.size / 1024 / 1024 > 80) {
  5606. this.$message.error("上传文件大于80兆,请重新选择文件!");
  5607. this.inputShow = true;
  5608. // var a = _this.$refs.upload1.uploadFiles;
  5609. // a.splice(a.length - 1, a.length);
  5610. // loading.close();
  5611. return;
  5612. }
  5613. } else if (
  5614. file.name
  5615. .split(".")
  5616. [file.name.split(".").length - 1].toLocaleUpperCase() != "PDF"
  5617. ) {
  5618. if (file.size / 1024 / 1024 > 80) {
  5619. this.$message.error("添加成上传文件大于80兆,请重新选择文件!");
  5620. this.inputShow = true;
  5621. // var a = _this.$refs.upload1.uploadFiles;
  5622. // a.splice(a.length - 1, a.length);
  5623. // loading.close();
  5624. return;
  5625. }
  5626. }
  5627. }
  5628. this.inputShow = false;
  5629. _this.unitJson[unitIndex].chapterInfo[0].taskJson[
  5630. itemTaskIndex
  5631. ].progress = 0;
  5632. _this.unitJson[unitIndex].chapterInfo[0].taskJson[
  5633. itemTaskIndex
  5634. ].proVisible = true;
  5635. _this.unitJson[unitIndex].chapterInfo[0].taskJson[
  5636. itemTaskIndex
  5637. ].isFinishSize = 0;
  5638. _this.unitJson[unitIndex].chapterInfo[0].taskJson[
  5639. itemTaskIndex
  5640. ].isAllSize = (file.size / 1024 / 1024).toFixed(2);
  5641. _this.$forceUpdate();
  5642. if (file) {
  5643. var params = {
  5644. Key:
  5645. file.name.split(".")[0] +
  5646. new Date().getTime() +
  5647. "." +
  5648. file.name.split(".")[file.name.split(".").length - 1],
  5649. ContentType: file.type,
  5650. Body: file,
  5651. "Access-Control-Allow-Credentials": "*",
  5652. ACL: "public-read",
  5653. }; //key可以设置为桶的相抵路径,Body为文件, ACL最好要设置
  5654. var options = {
  5655. partSize: 2048 * 1024 * 1024,
  5656. queueSize: 2,
  5657. leavePartsOnError: true,
  5658. };
  5659. bucket
  5660. .upload(params, options)
  5661. .on("httpUploadProgress", function (evt) {
  5662. //这里可以写进度条
  5663. // console.log("Uploaded : " + parseInt((evt.loaded * 80) / evt.total) + '%');
  5664. _this.unitJson[unitIndex].chapterInfo[0].taskJson[
  5665. itemTaskIndex
  5666. ].progress = parseInt((evt.loaded / evt.total) * 100);
  5667. _this.unitJson[unitIndex].chapterInfo[0].taskJson[
  5668. itemTaskIndex
  5669. ].isFinishSize = (evt.loaded / 1024 / 1024).toFixed(2);
  5670. _this.$forceUpdate();
  5671. })
  5672. .send(function (err, data) {
  5673. // loading.close();
  5674. _this.unitJson[unitIndex].chapterInfo[0].taskJson[
  5675. itemTaskIndex
  5676. ].progress = 100;
  5677. _this.unitJson[unitIndex].chapterInfo[0].taskJson[
  5678. itemTaskIndex
  5679. ].isFinishSize =
  5680. _this.unitJson[unitIndex].chapterInfo[0].taskJson[
  5681. itemTaskIndex
  5682. ].isAllSize;
  5683. _this.$forceUpdate();
  5684. setTimeout(() => {
  5685. _this.unitJson[unitIndex].chapterInfo[0].taskJson[
  5686. itemTaskIndex
  5687. ].proVisible = false;
  5688. _this.$forceUpdate();
  5689. }, 1000);
  5690. _this.inputShow = true;
  5691. if (err) {
  5692. // var a = _this.$refs.upload1.uploadFiles;
  5693. // a.splice(a.length - 1, a.length);
  5694. _this.$message.error("上传失败");
  5695. } else {
  5696. if (type == 13) {
  5697. let _type = 2;
  5698. var imgA = [
  5699. "png",
  5700. "jpg",
  5701. "jpeg",
  5702. "bmp",
  5703. "gif",
  5704. "webp",
  5705. "psd",
  5706. "svg",
  5707. "tiff",
  5708. ];
  5709. var fileA = [
  5710. "PDF",
  5711. "DOC",
  5712. "DOCX",
  5713. "DOCM",
  5714. "DOTM",
  5715. "DOTX",
  5716. "PPTX",
  5717. "PPSX",
  5718. "PPT",
  5719. "PPS",
  5720. "PPTM",
  5721. "POTM",
  5722. "PPAM",
  5723. "POTX",
  5724. "PPSM",
  5725. "XLSX",
  5726. "XLS",
  5727. ];
  5728. var videoA = [
  5729. "AVI",
  5730. "NAVI",
  5731. "MPEG",
  5732. "ASF",
  5733. "MOV",
  5734. "WMV",
  5735. "3GP",
  5736. "RM",
  5737. "RMVB",
  5738. "FLV",
  5739. "F4V",
  5740. "H.264",
  5741. "H.265",
  5742. "REAL VIDEO",
  5743. "MKV",
  5744. "WebM",
  5745. "HDDVD",
  5746. "MP4",
  5747. "MPG",
  5748. "M4V",
  5749. "MGV",
  5750. "OGV",
  5751. "QTM",
  5752. "STR",
  5753. "AMC",
  5754. "DVX",
  5755. "EVO",
  5756. "DAT",
  5757. "OGG",
  5758. "OGM",
  5759. ];
  5760. if (
  5761. fileA.indexOf(
  5762. data.Location.split(".")[
  5763. data.Location.split(".").length - 1
  5764. ].toLocaleUpperCase()
  5765. ) != -1
  5766. ) {
  5767. _type = 3;
  5768. } else if (
  5769. videoA.indexOf(
  5770. data.Location.split(".")[
  5771. data.Location.split(".").length - 1
  5772. ].toLocaleUpperCase()
  5773. ) != -1
  5774. ) {
  5775. _type = 2;
  5776. } else if (
  5777. imgA.indexOf(
  5778. data.Location.split(".")[
  5779. data.Location.split(".").length - 1
  5780. ].toLocaleLowerCase()
  5781. ) != -1
  5782. ) {
  5783. _type = 13;
  5784. } else {
  5785. _type = 12;
  5786. }
  5787. _this.unitJson[unitIndex].chapterInfo[0].taskJson[
  5788. itemTaskIndex
  5789. ].chapterData.push({
  5790. name: file.name,
  5791. url: data.Location,
  5792. uid: file.uid,
  5793. type: _type,
  5794. });
  5795. _this.imgChange1(null, null, _type, itemTaskIndex);
  5796. } else if (type == 2 || type == 3 || type == 12) {
  5797. _this.unitJson[unitIndex].chapterInfo[0].taskJson[
  5798. itemTaskIndex
  5799. ].chapterData.push({
  5800. name: file.name,
  5801. url: data.Location,
  5802. uid: file.uid,
  5803. type: type,
  5804. });
  5805. _this.imgChange1(null, null, type, itemTaskIndex);
  5806. } else if (type == 4) {
  5807. _this.unitJson[_this.unitIndex].chapterInfo[0].taskJson[
  5808. itemTaskIndex
  5809. ].fileList1.push({
  5810. name: file.name,
  5811. url: data.Location,
  5812. uid: file.uid,
  5813. });
  5814. _this.imgChange1(null, null, type, itemTaskIndex);
  5815. } else if (type == 5) {
  5816. _this.unitJson[_this.unitIndex].chapterInfo[0].taskJson[
  5817. itemTaskIndex
  5818. ].homeworkList.push({
  5819. name: file.name,
  5820. url: data.Location,
  5821. uid: file.uid,
  5822. });
  5823. _this.imgChange1(null, null, type, itemTaskIndex);
  5824. }
  5825. console.log(data.Location);
  5826. }
  5827. });
  5828. }
  5829. },
  5830. beforeUpload3(event, unitIndex, type, itemTaskIndex, string) {
  5831. // const loading = this.openLoading();
  5832. var file = event.target.files[0];
  5833. var credentials = {
  5834. accessKeyId: "AKIATLPEDU37QV5CHLMH",
  5835. secretAccessKey: "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",
  5836. }; //秘钥形式的登录上传
  5837. window.AWS.config.update(credentials);
  5838. window.AWS.config.region = "cn-northwest-1"; //设置区域
  5839. var bucket = new window.AWS.S3({ params: { Bucket: "ccrb" } }); //选择桶
  5840. var _this = this;
  5841. if (type == 3) {
  5842. var b = [
  5843. "DOC",
  5844. "DOCX",
  5845. "DOCM",
  5846. "DOTM",
  5847. "DOTX",
  5848. "PPTX",
  5849. "PPSX",
  5850. "PPT",
  5851. "PPS",
  5852. "PPTM",
  5853. "POTM",
  5854. "PPAM",
  5855. "POTX",
  5856. "PPSM",
  5857. ];
  5858. if (
  5859. b.indexOf(
  5860. file.name
  5861. .split(".")
  5862. [file.name.split(".").length - 1].toLocaleUpperCase()
  5863. ) != -1
  5864. ) {
  5865. if (file.size / 1024 / 1024 > 80) {
  5866. this.$message.error("上传文件大于80兆,请重新选择文件!");
  5867. this.inputShow = true;
  5868. // var a = _this.$refs.upload1.uploadFiles;
  5869. // a.splice(a.length - 1, a.length);
  5870. // loading.close();
  5871. return;
  5872. }
  5873. } else if (
  5874. file.name
  5875. .split(".")
  5876. [file.name.split(".").length - 1].toLocaleUpperCase() != "PDF"
  5877. ) {
  5878. if (file.size / 1024 / 1024 > 80) {
  5879. this.$message.error("添加成上传文件大于80兆,请重新选择文件!");
  5880. this.inputShow = true;
  5881. // var a = _this.$refs.upload1.uploadFiles;
  5882. // a.splice(a.length - 1, a.length);
  5883. // loading.close();
  5884. return;
  5885. }
  5886. }
  5887. }
  5888. this.inputShow = false;
  5889. _this.unitJson[unitIndex].chapterInfo[0].taskJson[
  5890. itemTaskIndex
  5891. ].progress = 0;
  5892. _this.unitJson[unitIndex].chapterInfo[0].taskJson[
  5893. itemTaskIndex
  5894. ].proVisible = true;
  5895. _this.unitJson[unitIndex].chapterInfo[0].taskJson[
  5896. itemTaskIndex
  5897. ].isFinishSize = 0;
  5898. _this.unitJson[unitIndex].chapterInfo[0].taskJson[
  5899. itemTaskIndex
  5900. ].isAllSize = (file.size / 1024 / 1024).toFixed(2);
  5901. _this.$forceUpdate();
  5902. if (file) {
  5903. var params = {
  5904. Key:
  5905. file.name.split(".")[0] +
  5906. new Date().getTime() +
  5907. "." +
  5908. file.name.split(".")[file.name.split(".").length - 1],
  5909. ContentType: file.type,
  5910. Body: file,
  5911. "Access-Control-Allow-Credentials": "*",
  5912. ACL: "public-read",
  5913. }; //key可以设置为桶的相抵路径,Body为文件, ACL最好要设置
  5914. var options = {
  5915. partSize: 2048 * 1024 * 1024,
  5916. queueSize: 2,
  5917. leavePartsOnError: true,
  5918. };
  5919. bucket
  5920. .upload(params, options)
  5921. .on("httpUploadProgress", function (evt) {
  5922. //这里可以写进度条
  5923. // console.log("Uploaded : " + parseInt((evt.loaded * 80) / evt.total) + '%');
  5924. _this.unitJson[unitIndex].chapterInfo[0].taskJson[
  5925. itemTaskIndex
  5926. ].progress = parseInt((evt.loaded / evt.total) * 100);
  5927. _this.unitJson[unitIndex].chapterInfo[0].taskJson[
  5928. itemTaskIndex
  5929. ].isFinishSize = (evt.loaded / 1024 / 1024).toFixed(2);
  5930. _this.$forceUpdate();
  5931. })
  5932. .send(function (err, data) {
  5933. // loading.close();
  5934. _this.unitJson[unitIndex].chapterInfo[0].taskJson[
  5935. itemTaskIndex
  5936. ].progress = 100;
  5937. _this.unitJson[unitIndex].chapterInfo[0].taskJson[
  5938. itemTaskIndex
  5939. ].isFinishSize =
  5940. _this.unitJson[unitIndex].chapterInfo[0].taskJson[
  5941. itemTaskIndex
  5942. ].isAllSize;
  5943. _this.$forceUpdate();
  5944. setTimeout(() => {
  5945. _this.unitJson[unitIndex].chapterInfo[0].taskJson[
  5946. itemTaskIndex
  5947. ].proVisible = false;
  5948. _this.$forceUpdate();
  5949. }, 1000);
  5950. _this.inputShow = true;
  5951. if (err) {
  5952. // var a = _this.$refs.upload1.uploadFiles;
  5953. // a.splice(a.length - 1, a.length);
  5954. _this.$message.error("上传失败");
  5955. } else {
  5956. if (type == 2 || type == 3) {
  5957. _this.unitJson[unitIndex].chapterInfo[0].taskJson[
  5958. itemTaskIndex
  5959. ].chapterData.push({
  5960. name: file.name,
  5961. // name: string+''+(_this.unitJson[unitIndex].chapterInfo[0].taskJson[
  5962. // itemTaskIndex
  5963. // ].chapterData.length+1),
  5964. url: data.Location,
  5965. uid: file.uid,
  5966. type: type,
  5967. text: string,
  5968. // text: string + '' + (_this.unitJson[unitIndex].chapterInfo[0].taskJson[
  5969. // itemTaskIndex
  5970. // ].chapterData.length + 1),
  5971. });
  5972. _this.imgChange1(null, null, type, itemTaskIndex);
  5973. } else if (type == 4) {
  5974. _this.unitJson[_this.unitIndex].chapterInfo[0].taskJson[
  5975. itemTaskIndex
  5976. ].fileList1.push({
  5977. name: file.name,
  5978. url: data.Location,
  5979. uid: file.uid,
  5980. });
  5981. _this.imgChange1(null, null, type, itemTaskIndex);
  5982. } else if (type == 5) {
  5983. _this.unitJson[_this.unitIndex].chapterInfo[0].taskJson[
  5984. itemTaskIndex
  5985. ].homeworkList.push({
  5986. name: file.name,
  5987. url: data.Location,
  5988. uid: file.uid,
  5989. });
  5990. _this.imgChange1(null, null, type, itemTaskIndex);
  5991. }
  5992. console.log(data.Location);
  5993. }
  5994. });
  5995. }
  5996. },
  5997. addunit() {
  5998. this.unitJson.push({
  5999. dyName: "", //单元标题
  6000. isUpdate: 1,
  6001. easy: this.unitJson[this.unitJson.length - 1].easy ? 1 : 0,
  6002. chapterInfo: [
  6003. {
  6004. isread: false,
  6005. chapterid: this.guid(),
  6006. title: "",
  6007. courseName: "",
  6008. taskJson: [
  6009. {
  6010. task: "",
  6011. taskDetail: "",
  6012. chapterData: [],
  6013. toolText: "",
  6014. toolChoose: [
  6015. {
  6016. tool: [],
  6017. toolDetail: "",
  6018. toolType: 0,
  6019. askCount: 1,
  6020. askTitle: "",
  6021. askJson: [{ askstitle: "", askItem: 1, checkList: [] }],
  6022. },
  6023. ],
  6024. isShowTools: false,
  6025. askCount: 1,
  6026. isFold: 1,
  6027. askTitle: "",
  6028. askJson: [{ askstitle: "", askItem: 1, checkList: [] }],
  6029. checkJson: [{ checkCount: [], checkPerent: [] }],
  6030. homeworkList: [],
  6031. },
  6032. ],
  6033. itemCount: 1,
  6034. fileList1: [],
  6035. video: [],
  6036. testData: [],
  6037. pData: [],
  6038. templateArray: [],
  6039. },
  6040. ],
  6041. });
  6042. this.addindex = this.unitJson.length - 1;
  6043. setTimeout(() => {
  6044. this.unitIndex = this.unitJson.length - 1;
  6045. setTimeout(() => {
  6046. console.log(this.$refs.dyInput)
  6047. this.$refs.dyInput[0].focus()
  6048. }, 100);
  6049. this.unitSet(this.unitIndex);
  6050. }, 0);
  6051. },
  6052. addToolFun(itemTaskIndex) {
  6053. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  6054. itemTaskIndex
  6055. ].toolChoose.push({
  6056. tool: [],
  6057. toolDetail: "",
  6058. toolType: 0,
  6059. askCount: 1,
  6060. askTitle: "",
  6061. askJson: [{ askstitle: "", askItem: 1, checkList: [] }],
  6062. });
  6063. },
  6064. addTaskBorder() {
  6065. this.unitJson[this.unitIndex].chapterInfo[0].taskJson.push({
  6066. task: "",
  6067. taskDetail: "",
  6068. chapterData: [],
  6069. toolText: "",
  6070. toolChoose: [
  6071. {
  6072. tool: [],
  6073. toolDetail: "",
  6074. toolType: 0,
  6075. askCount: 1,
  6076. askTitle: "",
  6077. askJson: [{ askstitle: "", askItem: 1, checkList: [] }],
  6078. },
  6079. ],
  6080. isShowTools: false,
  6081. askCount: 1,
  6082. isFold: 1,//任务收起状态
  6083. askTitle: "",
  6084. askJson: [{ askstitle: "", askItem: 1, checkList: [] }],
  6085. checkJson: [{ checkCount: [], checkPerent: [] }],
  6086. homeworkList: [],
  6087. });
  6088. setTimeout(() => {
  6089. this.checkEva(this.checkId);
  6090. setTimeout(() => {
  6091. this.checkEva(this.checkId);
  6092. }, 100);
  6093. }, 100);
  6094. },
  6095. add(e, i) {
  6096. var el = e.currentTarget;
  6097. el.getElementsByTagName("input")[0].click();
  6098. },
  6099. fold(i, e) {
  6100. if (this.unitJson[this.unitIndex].chapterInfo[0].taskJson[i].isFold == 0) {
  6101. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[i].isFold = 1;
  6102. } else {
  6103. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[i].isFold = 0;
  6104. }
  6105. },
  6106. fold2(i) {
  6107. if (this.unitJson[this.unitIndex].chapterInfo[0].taskJson[i].isFold2) {
  6108. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[i].isFold2 = false;
  6109. } else {
  6110. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[i].isFold2 = true;
  6111. }
  6112. this.$forceUpdate();
  6113. },
  6114. foldEva(i) {
  6115. if (this.unitJson[this.unitIndex].chapterInfo[0].taskJson[i].isEvaFold) {
  6116. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[i].isEvaFold = false;
  6117. } else {
  6118. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[i].isEvaFold = true;
  6119. setTimeout(() => {
  6120. this.checkEva(this.checkId);
  6121. setTimeout(() => {
  6122. this.checkEva(this.checkId);
  6123. }, 500);
  6124. }, 0);
  6125. }
  6126. this.$forceUpdate();
  6127. },
  6128. foldC(i) {
  6129. if (this.unitJson[this.unitIndex].chapterInfo[0].taskJson[i].isFoldchapter) {
  6130. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[i].isFoldchapter = false;
  6131. } else {
  6132. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[i].isFoldchapter = true;
  6133. }
  6134. this.$forceUpdate();
  6135. },
  6136. fold3(i, ti) {
  6137. if (this.unitJson[this.unitIndex].chapterInfo[0].taskJson[i].toolChoose[ti].isFold3) {
  6138. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[i].toolChoose[ti].isFold3 = false;
  6139. } else {
  6140. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[i].toolChoose[ti].isFold3 = true;
  6141. }
  6142. this.$forceUpdate();
  6143. },
  6144. deleteHomeworkBox(unitIndex, index, i) {
  6145. this.unitJson[unitIndex].chapterInfo[index].taskJson[
  6146. this.taskCount
  6147. ].homeworkList.splice(i, 1);
  6148. },
  6149. getStudent() {
  6150. let params = {
  6151. oid: this.oid,
  6152. cu: "",
  6153. cn: this.searchPeople,
  6154. };
  6155. this.ajax
  6156. .get(this.$store.state.api + "selectStudentAdd", params)
  6157. .then((res) => {
  6158. this.studentJuri = res.data[0];
  6159. })
  6160. .catch((err) => {
  6161. this.isLoading = false;
  6162. console.error(err);
  6163. });
  6164. },
  6165. getTeacher() {
  6166. let params = {
  6167. oid:
  6168. this.org && this.org != "undefined" && this.org != "null"
  6169. ? this.org
  6170. : this.oid,
  6171. cu: "",
  6172. cn: this.searchTN,
  6173. };
  6174. this.ajax
  6175. .get(
  6176. this.$store.state.api +
  6177. (this.org && this.org != "undefined" && this.org != "null"
  6178. ? "selectTeacherAddOrg"
  6179. : "selectTeacherAdd"),
  6180. params
  6181. )
  6182. .then((res) => {
  6183. let teacherJuri = res.data[0];
  6184. for (var i = 0; i < teacherJuri.length; i++) {
  6185. if (teacherJuri[i].userid == this.userid) {
  6186. teacherJuri.splice(i, 1);
  6187. break;
  6188. }
  6189. }
  6190. this.teacherJuri = teacherJuri;
  6191. })
  6192. .catch((err) => {
  6193. console.error(err);
  6194. });
  6195. },
  6196. searchStudent() {
  6197. this.getStudent();
  6198. },
  6199. selectGrage() {
  6200. let params = {
  6201. oid: this.oid,
  6202. };
  6203. this.ajax
  6204. .get(this.$store.state.api + "selectGrageBySchool", params)
  6205. .then((res) => {
  6206. this.gradeList = res.data[0];
  6207. })
  6208. .catch((err) => {
  6209. this.isLoading = false;
  6210. console.error(err);
  6211. });
  6212. },
  6213. //获取班级列表
  6214. getClass() {
  6215. let params = {
  6216. oid: this.oid,
  6217. gid: this.gradeId,
  6218. cn: this.classSearch,
  6219. };
  6220. this.ajax
  6221. .get(this.$store.state.api + "selectClassBySchoolSearch2", params)
  6222. .then((res) => {
  6223. if (!this.grade.length) {
  6224. this.grade = res.data[0];
  6225. }
  6226. this.grade2 = res.data[0];
  6227. this.classJuri = res.data[0];
  6228. let _check = []
  6229. let _check2 = []
  6230. for (var i = 0; i < this.grade2.length; i++) {
  6231. var gid = this.grade2[i].id
  6232. _check.push(gid)
  6233. }
  6234. for (var i = 0; i < this.checkboxList2.length; i++) {
  6235. var _id = this.checkboxList2[i]
  6236. if (_check.indexOf(_id) !== -1) {
  6237. _check2.push(_id)
  6238. }
  6239. }
  6240. this.checkAll = _check2.length === _check.length;
  6241. })
  6242. .catch((err) => {
  6243. this.isLoading = false;
  6244. console.error(err);
  6245. });
  6246. },
  6247. CourseType2Change(val) {
  6248. this.pTypeCheck = [];
  6249. for (var i = 0; i < this.CourseType2.length; i++) {
  6250. let typeA = this.CourseType2[i];
  6251. if (val.indexOf(typeA.name) != -1) {
  6252. this.pTypeCheck.push(...typeA.id);
  6253. }
  6254. }
  6255. },
  6256. getChapterData(e, i, j, ic, type) {
  6257. e.stopPropagation();
  6258. this.updataC = true;
  6259. this.icc = ic;
  6260. if ((type == 2 || type == 3) && e.target.tagName !== "INPUT") {
  6261. console.log("还不能下载图片喔");
  6262. }
  6263. },
  6264. deleteChapterData(e, i, j, ic, taskI) {
  6265. e.stopPropagation();
  6266. let _this = this;
  6267. _this
  6268. .$confirm("确定删除此项?", "提示", {
  6269. confirmButtonText: "确定",
  6270. cancelButtonText: "取消",
  6271. type: "warning",
  6272. })
  6273. .then(() => {
  6274. _this.unitJson[i].chapterInfo[j].taskJson[taskI].chapterData.splice(ic, 1);
  6275. })
  6276. .catch(() => {
  6277. return;
  6278. });
  6279. },
  6280. updataVideoT(e, i, j, ic) {
  6281. // e.stopPropagation();
  6282. // this.unitJson[i].chapterInfo[0].taskJson[j].chapterData[
  6283. // ic
  6284. // ].name = JSON.parse(JSON.stringify(e.target.value));
  6285. this.line = this.unitJson[i].chapterInfo[0].taskJson[0].chapterData[
  6286. ic
  6287. ].name;
  6288. this.taskCount = j;
  6289. this.lineCount = ic;
  6290. this.dialogVisibleupdataVideoT = true;
  6291. this.$forceUpdate();
  6292. },
  6293. updataVideoC() {
  6294. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[this.taskCount].chapterData[this.lineCount].name = JSON.parse(JSON.stringify(this.line));
  6295. this.dialogVisibleupdataVideoT = false;
  6296. this.$forceUpdate();
  6297. },
  6298. upCd(e, i, j, taskCount, ic) {
  6299. e.stopPropagation();
  6300. if (ic == 0) {
  6301. return;
  6302. }
  6303. var a =
  6304. JSON.parse(JSON.stringify(this.unitJson[i].chapterInfo[0].taskJson[taskCount].chapterData[ic - 1]));
  6305. this.unitJson[i].chapterInfo[0].taskJson[taskCount].chapterData[ic - 1] =
  6306. JSON.parse(JSON.stringify(this.unitJson[i].chapterInfo[0].taskJson[taskCount].chapterData[ic]));
  6307. this.unitJson[i].chapterInfo[0].taskJson[taskCount].chapterData[ic] = a;
  6308. this.$forceUpdate();
  6309. },
  6310. downCd(e, i, j, taskCount, ic) {
  6311. e.stopPropagation();
  6312. if (
  6313. ic ==
  6314. this.unitJson[i].chapterInfo[0].taskJson[taskCount].chapterData.length -
  6315. 1
  6316. ) {
  6317. return;
  6318. }
  6319. var a =
  6320. JSON.parse(JSON.stringify(this.unitJson[i].chapterInfo[0].taskJson[taskCount].chapterData[ic + 1]));
  6321. this.unitJson[i].chapterInfo[0].taskJson[taskCount].chapterData[ic + 1] =
  6322. JSON.parse(JSON.stringify(this.unitJson[i].chapterInfo[0].taskJson[taskCount].chapterData[ic]));
  6323. this.unitJson[i].chapterInfo[0].taskJson[taskCount].chapterData[ic] = a;
  6324. this.$forceUpdate();
  6325. },
  6326. upTool(e, i, j, tooli){
  6327. e.stopPropagation();
  6328. if (tooli == 0) {
  6329. return;
  6330. }
  6331. this.$confirm(
  6332. "切换工具顺序将删除此工具的提交成果,是否继续此操作?",
  6333. "提示",
  6334. {
  6335. confirmButtonText: "确定",
  6336. cancelButtonText: "取消",
  6337. type: "warning",
  6338. }
  6339. )
  6340. .then(() => {
  6341. var a =
  6342. JSON.parse(JSON.stringify(this.unitJson[i].chapterInfo[0].taskJson[j].toolChoose[tooli - 1]));
  6343. this.unitJson[i].chapterInfo[0].taskJson[j].toolChoose[tooli - 1] =
  6344. JSON.parse(JSON.stringify(this.unitJson[i].chapterInfo[0].taskJson[j].toolChoose[tooli]));
  6345. this.unitJson[i].chapterInfo[0].taskJson[j].toolChoose[tooli] = a;
  6346. this.$forceUpdate()
  6347. })
  6348. .catch(() => {
  6349. return;
  6350. });
  6351. },
  6352. downTool(e, i, j, tooli){
  6353. e.stopPropagation();
  6354. if ( tooli ==
  6355. this.unitJson[i].chapterInfo[0].taskJson[j].toolChoose.length -
  6356. 1) {
  6357. return;
  6358. }
  6359. this.$confirm(
  6360. "切换工具顺序将删除此工具的提交成果,是否继续此操作?",
  6361. "提示",
  6362. {
  6363. confirmButtonText: "确定",
  6364. cancelButtonText: "取消",
  6365. type: "warning",
  6366. }
  6367. )
  6368. .then(() => {
  6369. var a =
  6370. JSON.parse(JSON.stringify(this.unitJson[i].chapterInfo[0].taskJson[j].toolChoose[tooli + 1]));
  6371. this.unitJson[i].chapterInfo[0].taskJson[j].toolChoose[tooli + 1] =
  6372. JSON.parse(JSON.stringify(this.unitJson[i].chapterInfo[0].taskJson[j].toolChoose[tooli]));
  6373. this.unitJson[i].chapterInfo[0].taskJson[j].toolChoose[tooli] = a;
  6374. this.$forceUpdate()
  6375. })
  6376. .catch(() => {
  6377. return;
  6378. });
  6379. },
  6380. addWork() {
  6381. let cPan = 1;
  6382. for (var i = 0; i < this.unitJson.length; i++) {
  6383. for (
  6384. var j = 0;
  6385. j < this.unitJson[i].chapterInfo[0].taskJson.length;
  6386. j++
  6387. ) {
  6388. this.unitJson[i].chapterInfo[0].taskJson[j].proVisible = false;
  6389. this.unitJson[i].chapterInfo[0].taskJson[j].proVisible2 = false;
  6390. if (
  6391. this.unitJson[i].chapterInfo[0].taskJson[j].toolChoose.length > 1
  6392. ) {
  6393. for (
  6394. var z = 0;
  6395. z < this.unitJson[i].chapterInfo[0].taskJson[j].toolChoose.length;
  6396. z++
  6397. ) {
  6398. if (
  6399. !this.unitJson[i].chapterInfo[0].taskJson[j].toolChoose[z].tool
  6400. .length
  6401. ) {
  6402. this.$message.error("请把工具添加完整");
  6403. cPan = 2;
  6404. break;
  6405. }
  6406. }
  6407. }
  6408. if (this.unitJson[i].chapterInfo[0].taskJson[j].eList) {
  6409. this.unitJson[i].chapterInfo[0].taskJson[j].eList = this.unitJson[
  6410. i
  6411. ].chapterInfo[0].taskJson[j].eList.filter((ele) => {
  6412. return ele.value != "";
  6413. });
  6414. }
  6415. }
  6416. }
  6417. this.inputShow = true;
  6418. if (cPan == 2) {
  6419. this.steps--;
  6420. return;
  6421. }
  6422. for (var i = 0; i < this.unitJson.length; i++) {
  6423. delete this.unitJson[i].isUpdate;
  6424. }
  6425. let params = [
  6426. {
  6427. uid: this.userid,
  6428. title: this.courseName.replace(/%/g, "%25"),
  6429. brief: this.courseText.replace(/%/g, "%25"),
  6430. cover:
  6431. this.cover.length > 0
  6432. ? JSON.stringify(this.cover)
  6433. : JSON.stringify([
  6434. {
  6435. name: "noBanner.jpg",
  6436. url: "https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/wu1676621845022.png",
  6437. uid: 1656409780264,
  6438. status: "success",
  6439. },
  6440. ]),
  6441. evaId: this.evalua,
  6442. astudent:
  6443. this.checkboxList2.length > 0 ? this.checkboxList2.join(",") : "",
  6444. see: this.isTeacherSee == true ? 1 : 0,
  6445. chapters: JSON.stringify(this.unitJson).replaceAll(/%/g, "%25"),
  6446. template: this.cTemplate != "undefined" ? this.cTemplate : "",
  6447. courseType: JSON.stringify(this.courseTypeId),
  6448. ateacher:
  6449. this.checkboxList3.length > 0 ? this.checkboxList3.join(",") : "",
  6450. inviteCode: JSON.stringify(this.inviteCode),
  6451. },
  6452. ];
  6453. this.ajax
  6454. .post(this.$store.state.api + "addWorkNew2", params)
  6455. .then((res) => {
  6456. console.log(this.steps);
  6457. if (this.steps != 1 && this.steps != 2 && this.steps != 3) {
  6458. this.$message({
  6459. message: "新增成功",
  6460. type: "success",
  6461. });
  6462. }
  6463. this.number = res.data.ordernumber;
  6464. this.courseId = res.data.courseId;
  6465. this.cid = res.data.courseId;
  6466. this.courseUserid = this.userid;
  6467. this.islogin = true;
  6468. })
  6469. .catch((err) => {
  6470. this.$message.error("网络不佳");
  6471. console.error(err);
  6472. });
  6473. },
  6474. goCourse() {
  6475. window.parent.postMessage({ cid: this.courseId, type: "1" }, "*");
  6476. },
  6477. updateWork2() {
  6478. let _unitIndex = this.unitIndex;
  6479. let cPan = 1;
  6480. for (
  6481. var j = 0;
  6482. j < this.unitJson[_unitIndex].chapterInfo[0].taskJson.length;
  6483. j++
  6484. ) {
  6485. this.unitJson[_unitIndex].chapterInfo[0].taskJson[j].proVisible = false;
  6486. this.unitJson[_unitIndex].chapterInfo[0].taskJson[
  6487. j
  6488. ].proVisible2 = false;
  6489. if (
  6490. this.unitJson[_unitIndex].chapterInfo[0].taskJson[j].toolChoose
  6491. .length > 1
  6492. ) {
  6493. for (
  6494. var z = 0;
  6495. z <
  6496. this.unitJson[_unitIndex].chapterInfo[0].taskJson[j].toolChoose
  6497. .length;
  6498. z++
  6499. ) {
  6500. if (
  6501. !this.unitJson[_unitIndex].chapterInfo[0].taskJson[j].toolChoose[
  6502. z
  6503. ].tool.length
  6504. ) {
  6505. this.$message.error("请把工具添加完整");
  6506. cPan = 2;
  6507. break;
  6508. }
  6509. }
  6510. }
  6511. if (this.unitJson[_unitIndex].chapterInfo[0].taskJson[j].eList) {
  6512. this.unitJson[_unitIndex].chapterInfo[0].taskJson[j].eList =
  6513. this.unitJson[_unitIndex].chapterInfo[0].taskJson[j].eList.filter(
  6514. (ele) => {
  6515. return ele.value != "";
  6516. }
  6517. );
  6518. }
  6519. }
  6520. this.inputShow = true;
  6521. if (cPan == 2) {
  6522. this.steps--;
  6523. return;
  6524. }
  6525. let params = [
  6526. {
  6527. cid: this.cid,
  6528. chapters: JSON.stringify(this.unitJson),
  6529. uid: this.userid,
  6530. unitIndex: _unitIndex,
  6531. },
  6532. ];
  6533. this.ajax
  6534. .post(this.$store.state.api + "updateWorkNew4", params)
  6535. .then((res) => {
  6536. this.$message({
  6537. message: "修改成功",
  6538. type: "success",
  6539. });
  6540. this.courseId = this.cid;
  6541. })
  6542. .catch((err) => {
  6543. this.$message.error("网络不佳");
  6544. console.error(err);
  6545. });
  6546. },
  6547. updateWork() {
  6548. let cPan = 1;
  6549. for (var i = 0; i < this.unitJson.length; i++) {
  6550. for (
  6551. var j = 0;
  6552. j < this.unitJson[i].chapterInfo[0].taskJson.length;
  6553. j++
  6554. ) {
  6555. this.unitJson[i].chapterInfo[0].taskJson[j].proVisible = false;
  6556. this.unitJson[i].chapterInfo[0].taskJson[j].proVisible2 = false;
  6557. if (
  6558. this.unitJson[i].chapterInfo[0].taskJson[j].toolChoose.length > 1
  6559. ) {
  6560. for (
  6561. var z = 0;
  6562. z < this.unitJson[i].chapterInfo[0].taskJson[j].toolChoose.length;
  6563. z++
  6564. ) {
  6565. if (
  6566. !this.unitJson[i].chapterInfo[0].taskJson[j].toolChoose[z].tool
  6567. .length
  6568. ) {
  6569. this.$message.error("请把工具添加完整");
  6570. cPan = 2;
  6571. break;
  6572. }
  6573. }
  6574. }
  6575. if (this.unitJson[i].chapterInfo[0].taskJson[j].eList) {
  6576. this.unitJson[i].chapterInfo[0].taskJson[j].eList = this.unitJson[
  6577. i
  6578. ].chapterInfo[0].taskJson[j].eList.filter((ele) => {
  6579. return ele.value != "";
  6580. });
  6581. }
  6582. }
  6583. }
  6584. this.inputShow = true;
  6585. if (cPan == 2) {
  6586. this.steps--;
  6587. return;
  6588. }
  6589. for (var i = 0; i < this.unitJson.length; i++) {
  6590. delete this.unitJson[i].isUpdate;
  6591. }
  6592. let params = [
  6593. {
  6594. cid: this.cid,
  6595. title: this.courseName.replace(/%/g, "%25"),
  6596. brief: this.courseText.replace(/%/g, "%25"),
  6597. cover:
  6598. this.cover.length > 0
  6599. ? JSON.stringify(this.cover)
  6600. : JSON.stringify([
  6601. {
  6602. name: "noBanner.jpg",
  6603. url: "https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/wu1676621845022.png",
  6604. uid: 1656409780264,
  6605. status: "success",
  6606. },
  6607. ]),
  6608. evaId: this.evalua,
  6609. astudent:
  6610. this.checkboxList2.length > 0 ? this.checkboxList2.join(",") : "",
  6611. see: this.isTeacherSee == true ? 1 : 0,
  6612. chapters: JSON.stringify(this.unitJson).replaceAll(/%/g, "%25"),
  6613. template: this.myWord != "undefined" ? this.myWord : [],
  6614. uid: this.userid,
  6615. courseType: JSON.stringify(this.courseTypeId),
  6616. ateacher:
  6617. this.checkboxList3.length > 0 ? this.checkboxList3.join(",") : "",
  6618. inviteCode: JSON.stringify(this.inviteCode),
  6619. },
  6620. ];
  6621. this.ajax
  6622. .post(this.$store.state.api + "updateWorkNew2", params)
  6623. .then((res) => {
  6624. if (this.steps != 1 && this.steps != 2 && this.steps != 3) {
  6625. if (this.cidType == 1) {
  6626. this.$message({
  6627. message: "修改成功",
  6628. type: "success",
  6629. });
  6630. } else {
  6631. this.$message({
  6632. message: "新增成功",
  6633. type: "success",
  6634. });
  6635. }
  6636. }
  6637. this.number = this.nbOrder;
  6638. this.courseId = this.cid;
  6639. })
  6640. .catch((err) => {
  6641. this.$message.error("网络不佳");
  6642. console.error(err);
  6643. });
  6644. },
  6645. guid() {
  6646. var _num,
  6647. i,
  6648. _guid = "";
  6649. for (i = 0; i < 32; i++) {
  6650. _guid += Math.floor(Math.random() * 16).toString(16); //随机0 - 16 的数字 转变为16进制的字符串
  6651. _num = Math.floor((i - 7) / 4); //计算 (i-7)除4
  6652. if (_num > -1 && _num < 4 && i == 7 + 4 * _num) {
  6653. //会使guid中间加 "-" 形式为xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
  6654. _guid += "-";
  6655. }
  6656. }
  6657. return _guid;
  6658. },
  6659. insertWord() {
  6660. this.dialogVisible1 = true;
  6661. this.updateBoolean2 = false;
  6662. this.tTitle = "";
  6663. this.tdetail = "";
  6664. },
  6665. addWord() {
  6666. this.unitJson[this.unitIndex].chapterInfo[0].fileList1.push({
  6667. name: this.tTitle,
  6668. content: this.tdetail,
  6669. uid: this.guid(),
  6670. });
  6671. this.dialogVisible1 = false;
  6672. },
  6673. upWord() { },
  6674. selectWord(uid, i, c) {
  6675. this.dialogVisible1 = true;
  6676. this.updateBoolean2 = true;
  6677. if (
  6678. uid == this.unitJson[this.unitIndex].chapterInfo[i].fileList1[c].uid
  6679. ) {
  6680. this.tTitle =
  6681. this.unitJson[this.unitIndex].chapterInfo[i].fileList1[c].name;
  6682. this.tdetail =
  6683. this.unitJson[this.unitIndex].chapterInfo[i].fileList1[c].content;
  6684. }
  6685. },
  6686. isAddPP() {
  6687. if (this.checkboxList.length > 0) {
  6688. this.$message({
  6689. message: "添加成功",
  6690. type: "success",
  6691. });
  6692. this.dialogVisible3 = false;
  6693. } else {
  6694. this.$message({
  6695. message: "请添加课程成员",
  6696. type: "error",
  6697. });
  6698. }
  6699. },
  6700. isAddClass() {
  6701. this.dialogVisibleClass = false;
  6702. },
  6703. isAddPPTeacher() {
  6704. this.dialogVisibleMember = false;
  6705. this.setMan();
  6706. },
  6707. getTemplate() {
  6708. this.ajax
  6709. .get(this.$store.state.api + "getCourseTemplateT", "")
  6710. .then((res) => {
  6711. this.templateArray = res.data[0];
  6712. this.getTemplateOid();
  6713. this.$forceUpdate();
  6714. })
  6715. .catch((err) => { });
  6716. },
  6717. getTemplateOid() {
  6718. let params = {
  6719. oid: this.oid,
  6720. };
  6721. this.ajax
  6722. .get(this.$store.state.api + "getCourseTemplateTByOid", params)
  6723. .then((res) => {
  6724. if (res.data[0].length) {
  6725. this.templateArray = [...res.data[0], ...this.templateArray];
  6726. }
  6727. this.getTemplateOrg();
  6728. this.$forceUpdate();
  6729. })
  6730. .catch((err) => { });
  6731. },
  6732. getTemplateOrg() {
  6733. let params = {
  6734. oid: this.org,
  6735. };
  6736. this.ajax
  6737. .get(this.$store.state.api + "getCourseTemplateTByOid", params)
  6738. .then((res) => {
  6739. if (res.data[0].length) {
  6740. this.templateArray = [...res.data[0], ...this.templateArray];
  6741. }
  6742. this.$forceUpdate();
  6743. })
  6744. .catch((err) => { });
  6745. },
  6746. clearChoose() {
  6747. this.clearArray.splice(this.templateC.id, 1);
  6748. this.dialogVisible2 = false;
  6749. },
  6750. clearAttText() {
  6751. this.AttText = {
  6752. title: "",
  6753. text: "",
  6754. };
  6755. this.dialogVisible6 = false;
  6756. },
  6757. clearLine() {
  6758. this.line = "";
  6759. this.dialogVisible7 = false;
  6760. },
  6761. openTemplate(){
  6762. this.ctJson = {}
  6763. this.templateDialog = true
  6764. },
  6765. checkctJson(json){
  6766. if(this.ctJson.id == json.id){
  6767. this.ctJson = {}
  6768. }else{
  6769. this.ctJson = json
  6770. }
  6771. },
  6772. addTemplate(res){
  6773. let _this = this;
  6774. let _res = []
  6775. if(res.id == 1){
  6776. _res = [
  6777. {
  6778. dyName: "", //单元标题
  6779. easy: 1,
  6780. chapterInfo: [
  6781. {
  6782. isread: false,
  6783. chapterid: this.guid(),
  6784. title: "",
  6785. courseName: "",
  6786. taskJson: [
  6787. {
  6788. task: "",
  6789. taskDetail: "",
  6790. chapterData: [],
  6791. toolText: "",
  6792. toolChoose: [
  6793. {
  6794. tool: [],
  6795. toolDetail: "",
  6796. toolType: 0,
  6797. askCount: 1,
  6798. askTitle: "",
  6799. askJson: [
  6800. { askstitle: "", askItem: 1, checkList: [] },
  6801. ],
  6802. },
  6803. ],
  6804. isShowTools: false,
  6805. askCount: 1,
  6806. isFold: 1,
  6807. askTitle: "",
  6808. askJson: [{ askstitle: "", askItem: 1, checkList: [] }],
  6809. checkJson: [{ checkCount: [], checkPerent: [] }],
  6810. homeworkList: [],
  6811. },
  6812. ],
  6813. itemCount: 1,
  6814. fileList1: [],
  6815. video: [],
  6816. testData: [],
  6817. pData: [],
  6818. templateArray: [],
  6819. },
  6820. ],
  6821. },
  6822. ];
  6823. this.updateCourseState(1)
  6824. }else if(res.id == 2){
  6825. let iframe = top.document.querySelectorAll("#AIChat iframe")[0];
  6826. if (!iframe) {
  6827. this.$message.error("请使用AI共创生成");
  6828. return;
  6829. }
  6830. let copyData = iframe.contentWindow.copyData;
  6831. if (!copyData || !copyData.stageData || !copyData.stageData.length) {
  6832. this.$message.error("请使用AI共创生成");
  6833. return;
  6834. }
  6835. let stageData = copyData.stageData;
  6836. for (var i = 0; i < stageData.length; i++) {
  6837. res.push({
  6838. dyName: stageData[i], //单元标题
  6839. chapterInfo: [
  6840. {
  6841. isread: false,
  6842. chapterid: this.guid(),
  6843. title: "",
  6844. courseName: "",
  6845. taskJson: [
  6846. {
  6847. task: "",
  6848. taskDetail: "",
  6849. chapterData: [],
  6850. toolText: "",
  6851. toolChoose: [
  6852. {
  6853. tool: [],
  6854. toolDetail: "",
  6855. toolType: 0,
  6856. askCount: 1,
  6857. askTitle: "",
  6858. askJson: [{ askstitle: "", askItem: 1, checkList: [] }],
  6859. },
  6860. ],
  6861. isShowTools: false,
  6862. askCount: 1,
  6863. isFold: 1,
  6864. askTitle: "",
  6865. askJson: [{ askstitle: "", askItem: 1, checkList: [] }],
  6866. checkJson: [{ checkCount: [], checkPerent: [] }],
  6867. homeworkList: [],
  6868. },
  6869. ],
  6870. itemCount: 1,
  6871. fileList1: [],
  6872. video: [],
  6873. testData: [],
  6874. pData: [],
  6875. templateArray: [],
  6876. },
  6877. ],
  6878. });
  6879. }
  6880. this.updateCourseState(1)
  6881. }else if(!Object.keys(res).length){
  6882. this.$message.error("请选择模板")
  6883. retrun;
  6884. }else{
  6885. _res = JSON.parse(res.chapters)
  6886. this.updateCourseState(parseInt(res.state))
  6887. }
  6888. _this
  6889. .$confirm("确定选择此模板吗?修改课程时无法重置课程模板。", "提示", {
  6890. confirmButtonText: "确定",
  6891. cancelButtonText: "取消",
  6892. type: "warning",
  6893. })
  6894. .then(() => {
  6895. _this.unitJson = _res;
  6896. _this.updateWork();
  6897. // _this.steps++;
  6898. _this.templateDialog = false
  6899. setTimeout(() => {
  6900. this.checkEva(this.checkId);
  6901. setTimeout(() => {
  6902. this.checkEva(this.checkId);
  6903. }, 100);
  6904. }, 1000);
  6905. })
  6906. .catch(() => {
  6907. return;
  6908. });
  6909. },
  6910. checkTemplate(res) {
  6911. let _this = this;
  6912. _this
  6913. .$confirm("确定选择此模板吗?修改课程时无法重置课程模板。", "提示", {
  6914. confirmButtonText: "确定",
  6915. cancelButtonText: "取消",
  6916. type: "warning",
  6917. })
  6918. .then(() => {
  6919. _this.unitJson = JSON.parse(res.chapters);
  6920. _this.steps++;
  6921. setTimeout(() => {
  6922. this.checkEva(this.checkId);
  6923. setTimeout(() => {
  6924. this.checkEva(this.checkId);
  6925. }, 100);
  6926. }, 1000);
  6927. })
  6928. .catch(() => {
  6929. return;
  6930. });
  6931. },
  6932. checkTemplate1(w) {
  6933. this.steps++;
  6934. },
  6935. checkTemplate2() {
  6936. let _this = this;
  6937. _this
  6938. .$confirm("确定选择空模板吗?修改课程时无法重置课程模板。", "提示", {
  6939. confirmButtonText: "确定",
  6940. cancelButtonText: "取消",
  6941. type: "warning",
  6942. })
  6943. .then(() => {
  6944. _this.unitIndex = 0;
  6945. _this.unitJson = [
  6946. {
  6947. dyName: "", //单元标题
  6948. chapterInfo: [
  6949. {
  6950. isread: false,
  6951. chapterid: this.guid(),
  6952. title: "",
  6953. courseName: "",
  6954. taskJson: [
  6955. {
  6956. task: "",
  6957. taskDetail: "",
  6958. chapterData: [],
  6959. toolText: "",
  6960. toolChoose: [
  6961. {
  6962. tool: [],
  6963. toolDetail: "",
  6964. toolType: 0,
  6965. askCount: 1,
  6966. askTitle: "",
  6967. askJson: [
  6968. { askstitle: "", askItem: 1, checkList: [] },
  6969. ],
  6970. },
  6971. ],
  6972. isShowTools: false,
  6973. askCount: 1,
  6974. isFold: 1,
  6975. askTitle: "",
  6976. askJson: [{ askstitle: "", askItem: 1, checkList: [] }],
  6977. checkJson: [{ checkCount: [], checkPerent: [] }],
  6978. homeworkList: [],
  6979. },
  6980. ],
  6981. itemCount: 1,
  6982. fileList1: [],
  6983. video: [],
  6984. testData: [],
  6985. pData: [],
  6986. templateArray: [],
  6987. },
  6988. ],
  6989. },
  6990. ];
  6991. this.steps++;
  6992. setTimeout(() => {
  6993. this.checkEva(this.checkId);
  6994. setTimeout(() => {
  6995. this.checkEva(this.checkId);
  6996. }, 100);
  6997. }, 1000);
  6998. this.updateWork();
  6999. })
  7000. .catch(() => {
  7001. return;
  7002. });
  7003. },
  7004. checkTemplate3() {
  7005. let _this = this;
  7006. _this
  7007. .$confirm("确定选择简易模板吗?修改课程时无法重置课程模板。", "提示", {
  7008. confirmButtonText: "确定",
  7009. cancelButtonText: "取消",
  7010. type: "warning",
  7011. })
  7012. .then(() => {
  7013. _this.unitIndex = 0;
  7014. _this.unitJson = [
  7015. {
  7016. dyName: "", //单元标题
  7017. easy: 1,
  7018. chapterInfo: [
  7019. {
  7020. isread: false,
  7021. chapterid: this.guid(),
  7022. title: "",
  7023. courseName: "",
  7024. taskJson: [
  7025. {
  7026. task: "",
  7027. taskDetail: "",
  7028. chapterData: [],
  7029. toolText: "",
  7030. toolChoose: [
  7031. {
  7032. tool: [],
  7033. toolDetail: "",
  7034. toolType: 0,
  7035. askCount: 1,
  7036. askTitle: "",
  7037. askJson: [
  7038. { askstitle: "", askItem: 1, checkList: [] },
  7039. ],
  7040. },
  7041. ],
  7042. isShowTools: false,
  7043. askCount: 1,
  7044. isFold: 1,
  7045. askTitle: "",
  7046. askJson: [{ askstitle: "", askItem: 1, checkList: [] }],
  7047. checkJson: [{ checkCount: [], checkPerent: [] }],
  7048. homeworkList: [],
  7049. },
  7050. ],
  7051. itemCount: 1,
  7052. fileList1: [],
  7053. video: [],
  7054. testData: [],
  7055. pData: [],
  7056. templateArray: [],
  7057. },
  7058. ],
  7059. },
  7060. ];
  7061. // this.steps++;
  7062. this.updateWork();
  7063. })
  7064. .catch(() => {
  7065. return;
  7066. });
  7067. },
  7068. checkTemplate4() {
  7069. let _this = this;
  7070. _this
  7071. .$confirm("确定选择未来小学课程设计吗?", "提示", {
  7072. confirmButtonText: "确定",
  7073. cancelButtonText: "取消",
  7074. type: "warning",
  7075. })
  7076. .then(() => {
  7077. _this.unitIndex = 0;
  7078. _this.unitJson = JSON.parse(JSON.stringify(weilaiData));
  7079. this.steps++;
  7080. this.updateWork();
  7081. })
  7082. .catch(() => {
  7083. return;
  7084. });
  7085. },
  7086. wordNext() {
  7087. this.dialogVisible2 = false;
  7088. },
  7089. isAddOrUpdateAttText() {
  7090. if (this.AttTextType == 0) {
  7091. this.addAttTextMessage();
  7092. } else {
  7093. this.updateAttText();
  7094. }
  7095. },
  7096. isAddOrUpdateLine() {
  7097. if (!this.lineTitle) {
  7098. this.$message.error("请填写链接标题");
  7099. return;
  7100. }
  7101. if (this.lineType == 0) {
  7102. this.addLine();
  7103. } else {
  7104. this.updateLine();
  7105. }
  7106. },
  7107. addAttTextMessage() {
  7108. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  7109. this.taskCount
  7110. ].chapterData.push({
  7111. name: this.AttText.title,
  7112. url: this.AttText.text,
  7113. type: 6,
  7114. });
  7115. this.imgChange1(null, null, 6, this.taskCount);
  7116. this.dialogVisible6 = false;
  7117. },
  7118. selectAttText(itemTaskIndex, i) {
  7119. this.AttText.title =
  7120. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  7121. itemTaskIndex
  7122. ].chapterData[i].name;
  7123. this.AttText.text =
  7124. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  7125. itemTaskIndex
  7126. ].chapterData[i].url;
  7127. this.taskCount = itemTaskIndex;
  7128. this.AttTextIndex = i;
  7129. this.AttTextType = 1;
  7130. this.dialogVisible6 = true;
  7131. },
  7132. updateAttText() {
  7133. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  7134. this.taskCount
  7135. ].chapterData[this.AttTextIndex].name = this.AttText.title;
  7136. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  7137. this.taskCount
  7138. ].chapterData[this.AttTextIndex].url = this.AttText.text;
  7139. this.dialogVisible6 = false;
  7140. },
  7141. addLine() {
  7142. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  7143. this.lineCount
  7144. ].chapterData.push({
  7145. name: "链接",
  7146. title: this.lineTitle,
  7147. url: this.line,
  7148. type: 8,
  7149. });
  7150. this.imgChange1(null, null, 8, this.lineCount);
  7151. this.dialogVisible7 = false;
  7152. },
  7153. selectLine(itemTaskIndex, i) {
  7154. this.line =
  7155. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  7156. itemTaskIndex
  7157. ].chapterData[i].url;
  7158. this.lineTitle = this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  7159. itemTaskIndex
  7160. ].chapterData[i].title
  7161. ? this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  7162. .chapterData[i].title
  7163. : "";
  7164. this.taskCount = itemTaskIndex;
  7165. this.lineCount = i;
  7166. this.lineType = 1;
  7167. this.dialogVisible7 = true;
  7168. },
  7169. openUpdateSource(itemTaskIndex, i) {
  7170. this.sourceData = {}
  7171. let source = this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex].chapterData[i]
  7172. this.sourceData[source.id] = {}
  7173. this.sourceData[source.id].name = source.title
  7174. this.sourceData[source.id].url = source.url
  7175. this.dialogVisibleSource = true;
  7176. this.updateSourcePan = true;
  7177. this.taskCount = itemTaskIndex;
  7178. this.lineCount = i;
  7179. },
  7180. updateLine() {
  7181. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  7182. this.taskCount
  7183. ].chapterData[this.lineCount].url = this.line;
  7184. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  7185. this.taskCount
  7186. ].chapterData[this.lineCount].title = this.lineTitle;
  7187. this.dialogVisible7 = false;
  7188. },
  7189. addPP() {
  7190. this.dialogVisible3 = true;
  7191. },
  7192. goTo(path) {
  7193. this.$router.push(path);
  7194. },
  7195. openTools(itemTaskIndex, i, toolIndex) {
  7196. this.toolIndex = toolIndex;
  7197. this.taskCount = itemTaskIndex;
  7198. if (i == 4) {
  7199. if (toolIndex == null) {
  7200. var a =
  7201. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  7202. .chapterData;
  7203. for (var i = 0; i < a.length; i++) {
  7204. if (a[i].url == 4 && a[i].askJson.askTitle != "") {
  7205. this.askJson =
  7206. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  7207. itemTaskIndex
  7208. ].chapterData[i].askJson;
  7209. }
  7210. }
  7211. } else {
  7212. this.askJson = JSON.parse(
  7213. JSON.stringify(
  7214. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  7215. itemTaskIndex
  7216. ].toolChoose[toolIndex]
  7217. )
  7218. );
  7219. }
  7220. this.askJson2 = JSON.parse(JSON.stringify(this.askJson))
  7221. this.dialogVisible5 = true;
  7222. } else if (i == 45) {
  7223. if (
  7224. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  7225. .toolChoose[toolIndex].testJson
  7226. ) {
  7227. this.testJson = JSON.parse(
  7228. JSON.stringify(
  7229. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  7230. itemTaskIndex
  7231. ].toolChoose[toolIndex].testJson
  7232. )
  7233. );
  7234. } else {
  7235. var testJson = {
  7236. testCount: 1,
  7237. testTitle: "",
  7238. testJson: [
  7239. {
  7240. teststitle: "",
  7241. testItem: 1,
  7242. checkList: [],
  7243. timuList: [],
  7244. answer: [],
  7245. type: "1",
  7246. },
  7247. ],
  7248. };
  7249. this.testJson = testJson;
  7250. }
  7251. this.testJson2 = JSON.parse(JSON.stringify(this.testJson));
  7252. this.dialogVisibleChoice = true;
  7253. } else if (i == 47) {
  7254. if (
  7255. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  7256. .toolChoose[toolIndex].sentenceList
  7257. ) {
  7258. this.sentenceList = JSON.parse(
  7259. JSON.stringify(
  7260. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  7261. itemTaskIndex
  7262. ].toolChoose[toolIndex].sentenceList
  7263. )
  7264. );
  7265. } else {
  7266. var sentenceList = [
  7267. { sentenceTitle: "", addSentence: [], rightAnswer: [] },
  7268. ];
  7269. this.sentenceList = sentenceList;
  7270. }
  7271. this.sentenceList2 = JSON.parse(JSON.stringify(this.sentenceList));
  7272. this.dialogVisibleSentence = true;
  7273. } else if (i == 48) {
  7274. if (
  7275. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  7276. .toolChoose[toolIndex].tableJson
  7277. ) {
  7278. this.tableJson = JSON.parse(
  7279. JSON.stringify(
  7280. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  7281. itemTaskIndex
  7282. ].toolChoose[toolIndex].tableJson
  7283. )
  7284. );
  7285. } else {
  7286. var tableJson = { text: "" };
  7287. this.tableJson = tableJson;
  7288. }
  7289. this.dialogVisibleTable = true;
  7290. } else if (i == 52) {
  7291. if (
  7292. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  7293. .toolChoose[toolIndex].wordJson
  7294. ) {
  7295. this.wordJson = JSON.parse(
  7296. JSON.stringify(
  7297. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  7298. itemTaskIndex
  7299. ].toolChoose[toolIndex].wordJson
  7300. )
  7301. );
  7302. } else {
  7303. var wordJson = { text: "" };
  7304. this.wordJson = wordJson;
  7305. }
  7306. this.dialogVisibleWord = true;
  7307. // else if (i == 50) {
  7308. // if (
  7309. // this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  7310. // .toolChoose[toolIndex].uploadJson
  7311. // ) {
  7312. // this.uploadJson = JSON.parse(
  7313. // JSON.stringify(
  7314. // this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  7315. // itemTaskIndex
  7316. // ].toolChoose[toolIndex].uploadJson
  7317. // )
  7318. // );
  7319. // } else {
  7320. // var uploadJson = [];
  7321. // this.uploadJson = uploadJson;
  7322. // }
  7323. // this.dialogVisibleMoreUpload = true;
  7324. // }
  7325. } else if (i == 10) {
  7326. if (
  7327. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  7328. .toolChoose[toolIndex].preTime
  7329. ) {
  7330. this.preTime = JSON.parse(
  7331. JSON.stringify(
  7332. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  7333. itemTaskIndex
  7334. ].toolChoose[toolIndex].preTime
  7335. )
  7336. );
  7337. } else {
  7338. var preTime = 0;
  7339. this.preTime = preTime;
  7340. }
  7341. this.dialogVisiblePreTime = true;
  7342. } else if (i == 49) {
  7343. if (
  7344. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  7345. .toolChoose[toolIndex].groupJson
  7346. ) {
  7347. this.groupJson = JSON.parse(
  7348. JSON.stringify(
  7349. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  7350. itemTaskIndex
  7351. ].toolChoose[toolIndex].groupJson
  7352. )
  7353. );
  7354. } else {
  7355. var groupJson = {
  7356. group: [{ name: "第1组" }],
  7357. number: undefined,
  7358. islock: 1,
  7359. };
  7360. this.groupJson = groupJson;
  7361. }
  7362. this.dialogVisibleGroup = true;
  7363. } else if (i == 62) {
  7364. if (
  7365. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  7366. .toolChoose[toolIndex].videoJson
  7367. ) {
  7368. this.videoJson = JSON.parse(
  7369. JSON.stringify(
  7370. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  7371. itemTaskIndex
  7372. ].toolChoose[toolIndex].videoJson
  7373. )
  7374. );
  7375. } else {
  7376. var videoJson = {
  7377. video: "",
  7378. setting: [],
  7379. };
  7380. this.videoJson = videoJson;
  7381. }
  7382. this.dialogVisibleVideo = true;
  7383. } else if (i == 15) {
  7384. this.answerQ = this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  7385. itemTaskIndex
  7386. ].toolChoose[toolIndex].answerQ
  7387. ? JSON.parse(
  7388. JSON.stringify(
  7389. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  7390. itemTaskIndex
  7391. ].toolChoose[toolIndex].answerQ
  7392. )
  7393. )
  7394. : "";
  7395. this.answerQ2 = JSON.parse(JSON.stringify(this.answerQ))
  7396. this.dialogVisible8 = true;
  7397. } else if (i == 40) {
  7398. this.rateJson = this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  7399. itemTaskIndex
  7400. ].toolChoose[toolIndex].rateJson
  7401. ? JSON.parse(
  7402. JSON.stringify(
  7403. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  7404. itemTaskIndex
  7405. ].toolChoose[toolIndex].rateJson
  7406. )
  7407. )
  7408. : [{ detail: "", score: 5, value: "" }]; //{detail:"",score:5,value:""}
  7409. this.selectSteps = 1;
  7410. this.dialogVisibleRate = true;
  7411. } else if (i == 42) {
  7412. this.answerQ = this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  7413. itemTaskIndex
  7414. ].toolChoose[toolIndex].answerQ
  7415. ? JSON.parse(
  7416. JSON.stringify(
  7417. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  7418. itemTaskIndex
  7419. ].toolChoose[toolIndex].answerQ
  7420. )
  7421. )
  7422. : "";
  7423. this.dialogVisibleMp3 = true;
  7424. } else if (i == 41) {
  7425. this.selectJson = this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  7426. itemTaskIndex
  7427. ].toolChoose[toolIndex].selectJson
  7428. ? JSON.parse(
  7429. JSON.stringify(
  7430. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  7431. itemTaskIndex
  7432. ].toolChoose[toolIndex].selectJson
  7433. )
  7434. )
  7435. : { url: "", select: [], answer: [] };
  7436. this.selectSteps = 1;
  7437. this.selectJson2 = JSON.parse(JSON.stringify(this.selectJson))
  7438. this.dialogVisibleSelect = true;
  7439. } else if (i == 3) {
  7440. window.parent.postMessage(
  7441. {
  7442. tools: "3y",
  7443. cid: this.cid,
  7444. stage: this.unitIndex,
  7445. task: itemTaskIndex,
  7446. tool: toolIndex,
  7447. },
  7448. "*"
  7449. );
  7450. } else if (i == 1) {
  7451. window.parent.postMessage(
  7452. {
  7453. tools: "1y",
  7454. cid: this.cid,
  7455. stage: this.unitIndex,
  7456. task: itemTaskIndex,
  7457. tool: toolIndex,
  7458. },
  7459. "*"
  7460. );
  7461. } else if (i == 57) {
  7462. window.parent.postMessage(
  7463. {
  7464. tools: "57y",
  7465. cid: this.cid,
  7466. stage: this.unitIndex,
  7467. task: itemTaskIndex,
  7468. tool: toolIndex,
  7469. },
  7470. "*"
  7471. );
  7472. }else if(i == 69){
  7473. this.englishList = this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  7474. itemTaskIndex
  7475. ].toolChoose[toolIndex].englishList
  7476. ? JSON.parse(
  7477. JSON.stringify(
  7478. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  7479. itemTaskIndex
  7480. ].toolChoose[toolIndex].englishList
  7481. )
  7482. )
  7483. : { };
  7484. this.englishDialogVisible = true;
  7485. }
  7486. },
  7487. chapAddTools(i) {
  7488. if (this.chapTools[0].tools.length == 0) {
  7489. this.chapTools[0].tools.push(i);
  7490. } else {
  7491. if (this.chapTools[0].tools.indexOf(i) != -1) {
  7492. this.chapTools[0].tools.splice(this.chapTools[0].tools.indexOf(i), 1);
  7493. } else {
  7494. this.chapTools[0].tools.push(i);
  7495. }
  7496. }
  7497. this.$forceUpdate();
  7498. },
  7499. addChaptersDataTools() {
  7500. if (this.chapTools[0].tools.indexOf(4) != -1) {
  7501. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  7502. this.chapCount
  7503. ].chapterData.push({
  7504. name: this.chapTools[0].toolDetail,
  7505. url: this.chapTools[0].tools,
  7506. type: 7,
  7507. askJson: this.askJson,
  7508. });
  7509. } else {
  7510. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  7511. this.chapCount
  7512. ].chapterData.push({
  7513. name: this.chapTools[0].toolDetail,
  7514. url: this.chapTools[0].tools,
  7515. type: 7,
  7516. });
  7517. }
  7518. this.imgChange1(null, null, 7, this.chapCount);
  7519. this.dialogVisible4 = false;
  7520. },
  7521. addTools(i, itemTaskIndex, toolIndex) {
  7522. // if (
  7523. // this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  7524. // .toolChoose[toolIndex].tool.length == 0
  7525. // ) {
  7526. // this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  7527. // itemTaskIndex
  7528. // ].toolChoose[toolIndex].tool.push(i);
  7529. // } else {
  7530. // if (
  7531. // this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  7532. // itemTaskIndex
  7533. // ].toolChoose[toolIndex].tool.indexOf(i) != -1
  7534. // ) {
  7535. // this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  7536. // itemTaskIndex
  7537. // ].toolChoose[toolIndex].tool.splice(
  7538. // this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  7539. // itemTaskIndex
  7540. // ].toolChoose[toolIndex].tool.indexOf(i),
  7541. // 1
  7542. // );
  7543. // } else {
  7544. // this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  7545. // itemTaskIndex
  7546. // ].toolChoose[toolIndex].tool.push(i);
  7547. // }
  7548. // console.log(
  7549. // this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  7550. // .toolChoose[toolIndex].tool
  7551. // );
  7552. // }
  7553. if (i == 4) {
  7554. if (
  7555. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  7556. .toolChoose[toolIndex].askJson.askTitle == "" ||
  7557. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  7558. .toolChoose[toolIndex].askJson[0].askstitle == "" ||
  7559. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  7560. .toolChoose[toolIndex].askJson[0].checkList < 2
  7561. ) {
  7562. this.openTools(itemTaskIndex, 4, toolIndex);
  7563. // this.$message({
  7564. // message: "请填写完整问卷内容",
  7565. // type: "error",
  7566. // });
  7567. return;
  7568. }
  7569. }
  7570. if (i == 45) {
  7571. if (
  7572. !this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  7573. .toolChoose[toolIndex].testJson ||
  7574. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  7575. .toolChoose[toolIndex].testJson.testJson[0].teststitle == "" ||
  7576. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  7577. .toolChoose[toolIndex].testJson.testJson[0].checkList < 2
  7578. ) {
  7579. this.openTools(itemTaskIndex, 45, toolIndex);
  7580. // this.$message({
  7581. // message: "请填写完整问卷内容",
  7582. // type: "error",
  7583. // });
  7584. return;
  7585. }
  7586. }
  7587. if (i == 47) {
  7588. if (
  7589. !this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  7590. .toolChoose[toolIndex].sentenceList ||
  7591. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  7592. .toolChoose[toolIndex].sentenceList[0].rightAnswer == 0
  7593. ) {
  7594. this.openTools(itemTaskIndex, 47, toolIndex);
  7595. return;
  7596. }
  7597. }
  7598. if(i == 69){
  7599. if (
  7600. !this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  7601. .toolChoose[toolIndex].englishList
  7602. ) {
  7603. this.openTools(itemTaskIndex, 69, toolIndex);
  7604. return;
  7605. }
  7606. }
  7607. // if (i == 48) {
  7608. // if (
  7609. // !this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  7610. // .toolChoose[toolIndex].tableJson
  7611. // ) {
  7612. // this.openTools(itemTaskIndex, 48, toolIndex);
  7613. // return;
  7614. // }
  7615. // }
  7616. // if (i == 50) {
  7617. // if (
  7618. // !this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  7619. // .toolChoose[toolIndex].uploadJson
  7620. // ) {
  7621. // this.openTools(itemTaskIndex, 50, toolIndex);
  7622. // return;
  7623. // }
  7624. // }
  7625. if (i == 49) {
  7626. if (
  7627. !this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  7628. .toolChoose[toolIndex].groupJson
  7629. ) {
  7630. this.openTools(itemTaskIndex, 49, toolIndex);
  7631. return;
  7632. }
  7633. }
  7634. if (i == 62) {
  7635. if (
  7636. !this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  7637. .toolChoose[toolIndex].videoJson
  7638. ) {
  7639. this.openTools(itemTaskIndex, 62, toolIndex);
  7640. return;
  7641. }
  7642. }
  7643. if (i == 15) {
  7644. if (
  7645. !this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  7646. .toolChoose[toolIndex].answerQ ||
  7647. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  7648. .toolChoose[toolIndex].answerQ == ""
  7649. ) {
  7650. this.openTools(itemTaskIndex, 15, toolIndex);
  7651. // this.$message({
  7652. // message: "请填写问答内容",
  7653. // type: "error",
  7654. // });
  7655. return;
  7656. }
  7657. }
  7658. if (i == 40) {
  7659. if (
  7660. !this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  7661. .toolChoose[toolIndex].rateJson ||
  7662. !this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  7663. .toolChoose[toolIndex].rateJson.length
  7664. ) {
  7665. this.openTools(itemTaskIndex, 40, toolIndex);
  7666. return;
  7667. }
  7668. }
  7669. if (i == 41) {
  7670. if (
  7671. !this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  7672. .toolChoose[toolIndex].selectJson ||
  7673. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  7674. .toolChoose[toolIndex].selectJson.url == "" ||
  7675. !this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  7676. .toolChoose[toolIndex].selectJson.select.length ||
  7677. !this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  7678. .toolChoose[toolIndex].selectJson.answer.length
  7679. ) {
  7680. this.openTools(itemTaskIndex, 41, toolIndex);
  7681. return;
  7682. }
  7683. }
  7684. if (i == 42) {
  7685. if (
  7686. !this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  7687. .toolChoose[toolIndex].answerQ ||
  7688. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  7689. .toolChoose[toolIndex].answerQ == ""
  7690. ) {
  7691. this.openTools(itemTaskIndex, 42, toolIndex);
  7692. return;
  7693. }
  7694. }
  7695. if (
  7696. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  7697. .toolChoose[toolIndex].tool.length > 0
  7698. ) {
  7699. if (
  7700. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  7701. itemTaskIndex
  7702. ].toolChoose[toolIndex].tool.indexOf(i) != -1
  7703. ) {
  7704. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  7705. itemTaskIndex
  7706. ].toolChoose[toolIndex].tool.splice(
  7707. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  7708. itemTaskIndex
  7709. ].toolChoose[toolIndex].tool.indexOf(i),
  7710. 1
  7711. );
  7712. } else {
  7713. // this.$message({
  7714. // message: "每个工具只能添加一个",
  7715. // type: "error",
  7716. // });
  7717. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  7718. itemTaskIndex
  7719. ].toolChoose[toolIndex].tool = [];
  7720. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  7721. itemTaskIndex
  7722. ].toolChoose[toolIndex].tool.push(i);
  7723. }
  7724. } else {
  7725. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  7726. itemTaskIndex
  7727. ].toolChoose[toolIndex].tool.push(i);
  7728. }
  7729. this.$forceUpdate();
  7730. },
  7731. addAskList(index) {
  7732. this.askJson.askJson.splice(index + 1, 0, {
  7733. askstitle: "",
  7734. askItem: 1,
  7735. checkList: [],
  7736. })
  7737. this.askJson.askCount++;
  7738. },
  7739. addTestList(index) {
  7740. this.testJson.testJson.splice(index + 1, 0, {
  7741. teststitle: "",
  7742. testItem: 1,
  7743. checkList: [],
  7744. timuList: [],
  7745. answer: [],
  7746. type: "1",
  7747. })
  7748. this.testJson.testCount++;
  7749. },
  7750. deleteAskList(index) {
  7751. if (!this.askJson.askJson[index].askstitle && this.askJson.askJson[index].askItem == 1 && !this.askJson.askJson[index].checkList[0]) {
  7752. this.askJson.askJson.splice(index, 1);
  7753. this.askJson.askCount--;
  7754. } else {
  7755. let _this = this;
  7756. _this
  7757. .$confirm("此操作不可撤销,是否继续?", "提示", {
  7758. confirmButtonText: "确定",
  7759. cancelButtonText: "取消",
  7760. type: "warning",
  7761. })
  7762. .then(() => {
  7763. _this.askJson.askJson.splice(index, 1);
  7764. _this.askJson.askCount--;
  7765. })
  7766. .catch(() => {
  7767. return;
  7768. });
  7769. }
  7770. },
  7771. deleteTestList(index) {
  7772. if (!this.testJson.testJson[index].teststitle && this.testJson.testJson[index].testItem == 1 && !this.testJson.testJson[index].checkList[0]) {
  7773. this.testJson.testJson.splice(index, 1);
  7774. this.testJson.testCount--;
  7775. } else {
  7776. let _this = this;
  7777. _this
  7778. .$confirm("此操作不可撤销,是否继续?", "提示", {
  7779. confirmButtonText: "确定",
  7780. cancelButtonText: "取消",
  7781. type: "warning",
  7782. })
  7783. .then(() => {
  7784. _this.testJson.testJson.splice(index, 1);
  7785. _this.testJson.testCount--;
  7786. })
  7787. .catch(() => {
  7788. return;
  7789. });
  7790. }
  7791. },
  7792. askMove(type, index) {
  7793. if (type == 1) {
  7794. if (index > 0) {
  7795. let a = JSON.parse(JSON.stringify(this.askJson.askJson[index - 1]));
  7796. let b = JSON.parse(JSON.stringify(this.askJson.askJson[index]));
  7797. this.askJson.askJson[index - 1] = b;
  7798. this.askJson.askJson[index] = a;
  7799. }
  7800. } else {
  7801. if (
  7802. index < this.askJson.askJson.length - 1
  7803. ) {
  7804. let a = JSON.parse(JSON.stringify(this.askJson.askJson[index + 1]));
  7805. let b = JSON.parse(JSON.stringify(this.askJson.askJson[index]));
  7806. this.askJson.askJson[index + 1] = b;
  7807. this.askJson.askJson[index] = a;
  7808. }
  7809. }
  7810. this.$forceUpdate();
  7811. },
  7812. checkMove(type, index, checkIndex) {
  7813. if (type == 1) {
  7814. if (checkIndex > 0) {
  7815. let a = JSON.parse(JSON.stringify(this.askJson.askJson[index].checkList[checkIndex - 1]));
  7816. let b = JSON.parse(JSON.stringify(this.askJson.askJson[index].checkList[checkIndex]));
  7817. this.askJson.askJson[index].checkList[checkIndex - 1] = b;
  7818. this.askJson.askJson[index].checkList[checkIndex] = a;
  7819. }
  7820. } else {
  7821. if (
  7822. checkIndex < this.askJson.askJson[index].checkList.length - 1
  7823. ) {
  7824. let a = JSON.parse(JSON.stringify(this.askJson.askJson[index].checkList[checkIndex + 1]));
  7825. let b = JSON.parse(JSON.stringify(this.askJson.askJson[index].checkList[checkIndex]));
  7826. this.askJson.askJson[index].checkList[checkIndex + 1] = b;
  7827. this.askJson.askJson[index].checkList[checkIndex] = a;
  7828. }
  7829. }
  7830. this.$forceUpdate();
  7831. },
  7832. testMove(type, index) {
  7833. if (type == 1) {
  7834. if (index > 0) {
  7835. let a = JSON.parse(JSON.stringify(this.testJson.testJson[index - 1]));
  7836. let b = JSON.parse(JSON.stringify(this.testJson.testJson[index]));
  7837. this.testJson.testJson[index - 1] = b;
  7838. this.testJson.testJson[index] = a;
  7839. }
  7840. } else {
  7841. if (
  7842. index < this.testJson.testJson.length - 1
  7843. ) {
  7844. let a = JSON.parse(JSON.stringify(this.testJson.testJson[index + 1]));
  7845. let b = JSON.parse(JSON.stringify(this.testJson.testJson[index]));
  7846. this.testJson.testJson[index + 1] = b;
  7847. this.testJson.testJson[index] = a;
  7848. }
  7849. }
  7850. this.$forceUpdate();
  7851. },
  7852. tcheckMove(type, index, checkIndex) {
  7853. if (type == 1) {
  7854. if (checkIndex > 0) {
  7855. let a = JSON.parse(JSON.stringify(this.testJson.testJson[index].checkList[checkIndex - 1]));
  7856. let b = JSON.parse(JSON.stringify(this.testJson.testJson[index].checkList[checkIndex]));
  7857. this.testJson.testJson[index].checkList[checkIndex - 1] = b;
  7858. this.testJson.testJson[index].checkList[checkIndex] = a;
  7859. }
  7860. } else {
  7861. if (
  7862. checkIndex < this.testJson.testJson[index].checkList.length - 1
  7863. ) {
  7864. let a = JSON.parse(JSON.stringify(this.testJson.testJson[index].checkList[checkIndex + 1]));
  7865. let b = JSON.parse(JSON.stringify(this.testJson.testJson[index].checkList[checkIndex]));
  7866. this.testJson.testJson[index].checkList[checkIndex + 1] = b;
  7867. this.testJson.testJson[index].checkList[checkIndex] = a;
  7868. }
  7869. }
  7870. this.$forceUpdate();
  7871. },
  7872. addcheckList(json, index) {
  7873. // json.checkList.length++;
  7874. json.checkList.splice(index + 1, 0, '')
  7875. json.askItem++;
  7876. this.$forceUpdate();
  7877. },
  7878. deletecheckList(json, index) {
  7879. // json.checkList.length--;
  7880. json.checkList.splice(index, 1)
  7881. json.askItem--;
  7882. this.$forceUpdate();
  7883. },
  7884. addTcheckList(json, index) {
  7885. // json.checkList.length++;
  7886. json.checkList.splice(index + 1, 0, '')
  7887. json.testItem++;
  7888. this.$forceUpdate();
  7889. },
  7890. deleteTcheckList(json, index) {
  7891. // json.checkList.length--;
  7892. json.checkList.splice(index, 1)
  7893. json.testItem--;
  7894. this.$forceUpdate();
  7895. },
  7896. checkTestType(type, json) {
  7897. json.type = type;
  7898. setTimeout(() => {
  7899. json.answer = [];
  7900. }, 100)
  7901. },
  7902. checkAskType(type, json) {
  7903. json.type = type;
  7904. // json.checkList = [];
  7905. this.$forceUpdate();
  7906. },
  7907. addSelectList(json) {
  7908. json.select.push("");
  7909. json.answer.push("");
  7910. },
  7911. deleteSelectList(json) {
  7912. // json.select.length--;
  7913. // json.answer.length--;
  7914. json.select.splice(json.select.length - 1, 1);
  7915. json.answer.splice(json.answer.length - 1, 1);
  7916. },
  7917. addAsk() {
  7918. if (this.askJson.askTitle === "") {
  7919. this.$message.error("标题不能为空!");
  7920. return;
  7921. }
  7922. var aj = this.askJson.askJson;
  7923. var b = 1;
  7924. for (var i = 0; i < aj.length; i++) {
  7925. if (aj[i].askstitle === "") {
  7926. var a = 1;
  7927. for (let index = 0; index < aj[i].askItem; index++) {
  7928. const element = aj[i].checkList[index]
  7929. ? aj[i].checkList[index]
  7930. : "";
  7931. if (element != "") {
  7932. b++;
  7933. this.$message.error(`请将题目${i + 1}填写完整。`);
  7934. return;
  7935. } else {
  7936. a++;
  7937. }
  7938. }
  7939. if (b == 1) {
  7940. this.$message.error("至少填写一个问题");
  7941. return;
  7942. }
  7943. } else if (aj[i].askstitle != "") {
  7944. for (let index = 0; index < aj[i].askItem; index++) {
  7945. const element = aj[i].checkList[index]
  7946. ? aj[i].checkList[index]
  7947. : "";
  7948. var index = 0;
  7949. for (var z = 0; z < aj[i].checkList.length; z++) {
  7950. var checkC = aj[i].checkList[z] ? aj[i].checkList[z] : "";
  7951. if (checkC != "") {
  7952. index++;
  7953. } else {
  7954. this.$message.error(`题目${i + 1}选项不能为空!`);
  7955. return;
  7956. }
  7957. for (var z2 = z + 1; z2 < aj[i].checkList.length; z2++) {
  7958. let checkC2 = aj[i].checkList[z2] ? aj[i].checkList[z2] : "";
  7959. if (checkC == checkC2) {
  7960. this.$message.error(`第${i + 1}题的选项${z + 1}和选项${z2 + 1}重复了,请修改!`);
  7961. return;
  7962. }
  7963. }
  7964. }
  7965. b++;
  7966. if (index < 2) {
  7967. this.$message.error("每道题目至少需要设置2个选项。");
  7968. return;
  7969. }
  7970. }
  7971. }
  7972. }
  7973. this.askJson.askJson = this.askJson.askJson.filter((el) => {
  7974. var elc = el.checkList.filter((element) => {
  7975. return element != "";
  7976. });
  7977. return el.askstitle != "" && elc.length != 0;
  7978. });
  7979. if (!this.dialogVisible4) {
  7980. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  7981. this.taskCount
  7982. ].toolChoose[this.toolIndex] = this.askJson;
  7983. }
  7984. this.dialogVisible5 = false;
  7985. if (
  7986. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[this.taskCount]
  7987. .toolChoose[this.toolIndex].tool != 4
  7988. ) {
  7989. this.addTools(4, this.taskCount, this.toolIndex);
  7990. }
  7991. },
  7992. addTest() {
  7993. // if (this.testJson.testTitle === "") {
  7994. // this.$message.error("标题不能为空!");
  7995. // return;
  7996. // }
  7997. var aj = this.testJson.testJson;
  7998. var b = 1;
  7999. for (var i = 0; i < aj.length; i++) {
  8000. if (aj[i].teststitle === "" && aj[i].timuList.length == 0) {
  8001. var a = 1;
  8002. for (let index = 0; index < aj[i].testItem; index++) {
  8003. const element = aj[i].checkList[index]
  8004. ? aj[i].checkList[index]
  8005. : "";
  8006. if (element != "") {
  8007. b++;
  8008. this.$message.error(`请将题目${i + 1}填写完整。`);
  8009. return;
  8010. } else {
  8011. a++;
  8012. }
  8013. }
  8014. if (b == 1) {
  8015. this.$message.error("至少填写一个问题");
  8016. return;
  8017. }
  8018. } else if (aj[i].teststitle != "" || aj[i].timuList.length > 0) {
  8019. for (let index = 0; index < aj[i].testItem; index++) {
  8020. const element = aj[i].checkList[index]
  8021. ? aj[i].checkList[index]
  8022. : "";
  8023. var index = 0;
  8024. for (var z = 0; z < aj[i].checkList.length; z++) {
  8025. var checkC = aj[i].checkList[z] ? aj[i].checkList[z] : "";
  8026. if (checkC != "") {
  8027. index++;
  8028. } else {
  8029. this.$message.error(`题目${i + 1}选项不能为空!`);
  8030. return;
  8031. }
  8032. for (var z2 = z + 1; z2 < aj[i].checkList.length; z2++) {
  8033. let checkC2 = aj[i].checkList[z2] ? aj[i].checkList[z2] : "";
  8034. if (checkC == checkC2) {
  8035. this.$message.error(`第${i + 1}题的选项${z + 1}和选项${z2 + 1}重复了,请修改!`);
  8036. return;
  8037. }
  8038. }
  8039. }
  8040. b++;
  8041. if (index < 2) {
  8042. this.$message.error("每道题目至少需要设置2个选项。");
  8043. return;
  8044. }
  8045. if (
  8046. (aj[i].type == "2" && !aj[i].answer.length) ||
  8047. (aj[i].type == "1" && ((typeof aj[i].answer == 'object' && !aj[i].answer.length) || (aj[i].answer !== 0 && !aj[i].answer)))
  8048. ) {
  8049. this.$message.error(`请将题目${i + 1}的正确选项设置完整`);
  8050. return;
  8051. }
  8052. }
  8053. }
  8054. }
  8055. var isTestJson = JSON.parse(JSON.stringify(this.testJson));
  8056. isTestJson.testJson = this.testJson.testJson.filter((el) => {
  8057. var elc = el.checkList.filter((element) => {
  8058. return element != "";
  8059. });
  8060. return (
  8061. (el.teststitle != "" || el.timuList.length > 0) && elc.length != 0
  8062. );
  8063. });
  8064. isTestJson.testCount = isTestJson.testJson.length;
  8065. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  8066. this.taskCount
  8067. ].toolChoose[this.toolIndex].testJson = isTestJson;
  8068. this.dialogVisibleChoice = false;
  8069. if (
  8070. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[this.taskCount]
  8071. .toolChoose[this.toolIndex].tool != 45
  8072. ) {
  8073. this.addTools(45, this.taskCount, this.toolIndex);
  8074. }
  8075. },
  8076. addVideoJson(videoJson) {
  8077. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  8078. this.taskCount
  8079. ].toolChoose[this.toolIndex].videoJson = videoJson;
  8080. this.dialogVisibleVideo = false;
  8081. if (
  8082. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[this.taskCount]
  8083. .toolChoose[this.toolIndex].tool != 62
  8084. ) {
  8085. this.addTools(62, this.taskCount, this.toolIndex);
  8086. }
  8087. },
  8088. //自动获取剪贴板
  8089. pasteOption() {
  8090. let iframe = top.document.querySelectorAll("#AIChat iframe")[0];
  8091. if (!iframe) {
  8092. this.$message.error("请使用AI共创生成题目");
  8093. return;
  8094. }
  8095. let copyData = iframe.contentWindow.copyData;
  8096. if (!copyData || !copyData.selectData.length) {
  8097. this.$message.error("请使用AI共创生成题目");
  8098. return;
  8099. }
  8100. let selectData = copyData.selectData;
  8101. for (var i = 0; i < selectData.length; i++) {
  8102. let answer = 0;
  8103. switch (selectData[i].answer[0]) {
  8104. case "A":
  8105. answer = 0;
  8106. break;
  8107. case "B":
  8108. answer = 1;
  8109. break;
  8110. case "C":
  8111. answer = 2;
  8112. break;
  8113. case "D":
  8114. answer = 3;
  8115. break;
  8116. case "E":
  8117. answer = 4;
  8118. break;
  8119. default:
  8120. break;
  8121. }
  8122. this.testJson.testJson.push({
  8123. teststitle: selectData[i].subject,
  8124. testItem: selectData[i].options.length,
  8125. checkList: selectData[i].options,
  8126. timuList: [],
  8127. answer: answer,
  8128. type: "1",
  8129. });
  8130. this.testJson.testCount++;
  8131. }
  8132. var isTestJson = JSON.parse(JSON.stringify(this.testJson));
  8133. isTestJson.testJson = this.testJson.testJson.filter((el) => {
  8134. var elc = el.checkList.filter((element) => {
  8135. return element != "";
  8136. });
  8137. return (
  8138. (el.teststitle != "" || el.timuList.length > 0) && elc.length != 0
  8139. );
  8140. });
  8141. isTestJson.testCount = isTestJson.testJson.length;
  8142. this.testJson = isTestJson;
  8143. this.$forceUpdate();
  8144. },
  8145. pasteTask() {
  8146. let iframe = top.document.querySelectorAll("#AIChat iframe")[0];
  8147. if (!iframe) {
  8148. this.$message.error("请使用AI共创生成");
  8149. return;
  8150. }
  8151. let copyData = iframe.contentWindow.copyData;
  8152. if (!copyData || !copyData.tasksData || !copyData.tasksData.length) {
  8153. this.$message.error("请使用AI共创生成");
  8154. return;
  8155. }
  8156. let stageTasksData = copyData.tasksData;
  8157. let taskA = [];
  8158. let tasks = stageTasksData;
  8159. for (var j = 0; j < tasks.length; j++) {
  8160. taskA.push({
  8161. task: tasks[j].taskName,
  8162. taskDetail: tasks[j].taskDecs,
  8163. chapterData: [],
  8164. toolText: "",
  8165. toolChoose: [
  8166. {
  8167. tool: [],
  8168. toolDetail: "",
  8169. toolType: 0,
  8170. askCount: 1,
  8171. askTitle: "",
  8172. askJson: [{ askstitle: "", askItem: 1, checkList: [] }],
  8173. },
  8174. ],
  8175. isShowTools: false,
  8176. askCount: 1,
  8177. isFold: 1,
  8178. askTitle: "",
  8179. askJson: [{ askstitle: "", askItem: 1, checkList: [] }],
  8180. checkJson: [{ checkCount: [], checkPerent: [] }],
  8181. homeworkList: [],
  8182. });
  8183. }
  8184. this.unitJson[this.unitIndex].chapterInfo[0].taskJson = taskA;
  8185. this.$forceUpdate();
  8186. },
  8187. pasteStage() {
  8188. let iframe = top.document.querySelectorAll("#AIChat iframe")[0];
  8189. if (!iframe) {
  8190. this.$message.error("请使用AI共创生成");
  8191. return;
  8192. }
  8193. let copyData = iframe.contentWindow.copyData;
  8194. if (!copyData || !copyData.stageData || !copyData.stageData.length) {
  8195. this.$message.error("请使用AI共创生成");
  8196. return;
  8197. }
  8198. let stageData = copyData.stageData;
  8199. let stage = [];
  8200. for (var i = 0; i < stageData.length; i++) {
  8201. stage.push({
  8202. dyName: stageData[i], //单元标题
  8203. chapterInfo: [
  8204. {
  8205. isread: false,
  8206. chapterid: this.guid(),
  8207. title: "",
  8208. courseName: "",
  8209. taskJson: [
  8210. {
  8211. task: "",
  8212. taskDetail: "",
  8213. chapterData: [],
  8214. toolText: "",
  8215. toolChoose: [
  8216. {
  8217. tool: [],
  8218. toolDetail: "",
  8219. toolType: 0,
  8220. askCount: 1,
  8221. askTitle: "",
  8222. askJson: [{ askstitle: "", askItem: 1, checkList: [] }],
  8223. },
  8224. ],
  8225. isShowTools: false,
  8226. askCount: 1,
  8227. isFold: 1,
  8228. askTitle: "",
  8229. askJson: [{ askstitle: "", askItem: 1, checkList: [] }],
  8230. checkJson: [{ checkCount: [], checkPerent: [] }],
  8231. homeworkList: [],
  8232. },
  8233. ],
  8234. itemCount: 1,
  8235. fileList1: [],
  8236. video: [],
  8237. testData: [],
  8238. pData: [],
  8239. templateArray: [],
  8240. },
  8241. ],
  8242. });
  8243. }
  8244. let _this = this;
  8245. _this
  8246. .$confirm("确定选择智能粘贴模板吗?修改课程时无法重置课程模板。", "提示", {
  8247. confirmButtonText: "确定",
  8248. cancelButtonText: "取消",
  8249. type: "warning",
  8250. })
  8251. .then(() => {
  8252. _this.unitIndex = 0;
  8253. _this.unitJson = stage;
  8254. // _this.steps++;
  8255. _this.updateWork();
  8256. })
  8257. .catch(() => {
  8258. return;
  8259. });
  8260. },
  8261. openStageBox() {
  8262. this.unitJson3 = JSON.parse(JSON.stringify(this.unitJson))
  8263. this.dialogVisibleStageChange = true;
  8264. },
  8265. updateChange() {
  8266. this.$confirm(
  8267. "切换阶段顺序将删除所有工具的提交成果,是否继续此操作?",
  8268. "提示",
  8269. {
  8270. confirmButtonText: "确定",
  8271. cancelButtonText: "取消",
  8272. type: "warning",
  8273. }
  8274. )
  8275. .then(() => {
  8276. this.unitJson = JSON.parse(JSON.stringify(this.unitJson3))
  8277. this.updateWork()
  8278. this.dialogVisibleStageChange = false;
  8279. })
  8280. .catch(() => {
  8281. return;
  8282. });
  8283. },
  8284. addAnswer() {
  8285. if (this.answerQ == "") {
  8286. this.$message.error("请输入您想要问的问题");
  8287. return;
  8288. }
  8289. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  8290. this.taskCount
  8291. ].toolChoose[this.toolIndex].answerQ = this.answerQ;
  8292. this.dialogVisible8 = false;
  8293. if (
  8294. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[this.taskCount]
  8295. .toolChoose[this.toolIndex].tool != 15
  8296. ) {
  8297. this.addTools(15, this.taskCount, this.toolIndex);
  8298. }
  8299. },
  8300. addMp3Answer() {
  8301. if (this.answerQ == "") {
  8302. this.$message.error("请输入您想要回答的问题");
  8303. return;
  8304. }
  8305. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  8306. this.taskCount
  8307. ].toolChoose[this.toolIndex].answerQ = this.answerQ;
  8308. this.dialogVisibleMp3 = false;
  8309. },
  8310. addRateAnswer() {
  8311. var a = 1;
  8312. for (var i = 0; i < this.rateJson.length; i++) {
  8313. if (this.rateJson[i].value == "") {
  8314. a = 2;
  8315. break;
  8316. }
  8317. }
  8318. if (a == 2) {
  8319. this.$message.error("请把评价信息填写完整");
  8320. return;
  8321. }
  8322. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  8323. this.taskCount
  8324. ].toolChoose[this.toolIndex].rateJson = this.rateJson;
  8325. this.dialogVisibleRate = false;
  8326. if (
  8327. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[this.taskCount]
  8328. .toolChoose[this.toolIndex].tool != 40
  8329. ) {
  8330. this.addTools(40, this.taskCount, this.toolIndex);
  8331. }
  8332. },
  8333. addSelectAnswer() {
  8334. if (this.selectJson.url == "") {
  8335. this.$message.error("请上传题目");
  8336. return;
  8337. }
  8338. if (!this.selectJson.select.length) {
  8339. this.$message.error("请添加选项");
  8340. return;
  8341. }
  8342. if (!this.selectJson.answer.length) {
  8343. this.$message.error("请设置答案");
  8344. return;
  8345. }
  8346. var a = 1;
  8347. for (var i = 0; i < this.selectJson.answer.length; i++) {
  8348. if (!this.selectJson.answer[i] && this.selectJson.answer[i] !== 0) {
  8349. a = 2;
  8350. }
  8351. }
  8352. if (a == 2) {
  8353. this.$message.error("请设置答案");
  8354. return;
  8355. }
  8356. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  8357. this.taskCount
  8358. ].toolChoose[this.toolIndex].selectJson = this.selectJson;
  8359. this.dialogVisibleSelect = false;
  8360. if (
  8361. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[this.taskCount]
  8362. .toolChoose[this.toolIndex].tool != 41
  8363. ) {
  8364. this.addTools(41, this.taskCount, this.toolIndex);
  8365. }
  8366. },
  8367. nextSelectSteps() {
  8368. if (this.selectJson.url == "") {
  8369. this.$message.error("请上传题目");
  8370. return;
  8371. }
  8372. if (!this.selectJson.select.length) {
  8373. this.$message.error("请添加选项");
  8374. return;
  8375. } else {
  8376. for (var z = 0; z < this.selectJson.select.length; z++) {
  8377. let checkC = this.selectJson.select[z];
  8378. for (var z2 = z + 1; z2 < this.selectJson.select.length; z2++) {
  8379. let checkC2 = this.selectJson.select[z2];
  8380. if (checkC == checkC2) {
  8381. this.$message.error(`选项${z + 1}和选项${z2 + 1}重复了,请修改!`);
  8382. return;
  8383. }
  8384. }
  8385. }
  8386. }
  8387. var a = 1;
  8388. for (var i = 0; i < this.selectJson.select.length; i++) {
  8389. if (!this.selectJson.select[i]) {
  8390. a = 2;
  8391. }
  8392. }
  8393. if (a == 2) {
  8394. this.$message.error("添加的选项不能为空");
  8395. return;
  8396. }
  8397. this.selectSteps++;
  8398. },
  8399. selectCourseDetail() {
  8400. if (this.cid == "" || this.cid == undefined) {
  8401. console.log("这是新增课程");
  8402. this.selectAllType();
  8403. } else {
  8404. this.cidType = 1;
  8405. let params = {
  8406. cid: this.cid,
  8407. };
  8408. this.ajax
  8409. .get(this.$store.state.api + "select_course_detail", params)
  8410. .then((res) => {
  8411. this.loading = true;
  8412. this.unitJson = JSON.parse(res.data[0][0].chapters);
  8413. this.courseState = res.data[0][0].state
  8414. for (var j = 0; j < this.unitJson.length; j++) {
  8415. for (
  8416. var k = 0;
  8417. k < this.unitJson[j].chapterInfo[0].taskJson.length;
  8418. k++
  8419. ) {
  8420. this.unitJson[j].chapterInfo[0].taskJson[k].toolChoose = this
  8421. .unitJson[j].chapterInfo[0].taskJson[k].toolChoose
  8422. ? this.unitJson[j].chapterInfo[0].taskJson[k].toolChoose
  8423. : [];
  8424. let _chapterData = [];
  8425. for (
  8426. var c = 0;
  8427. c <
  8428. this.unitJson[j].chapterInfo[0].taskJson[k].chapterData
  8429. .length;
  8430. c++
  8431. ) {
  8432. if (
  8433. this.unitJson[j].chapterInfo[0].taskJson[k].chapterData[c]
  8434. ) {
  8435. _chapterData.push(
  8436. this.unitJson[j].chapterInfo[0].taskJson[k].chapterData[c]
  8437. );
  8438. }
  8439. }
  8440. this.unitJson[j].chapterInfo[0].taskJson[k].chapterData =
  8441. _chapterData;
  8442. }
  8443. }
  8444. this.$forceUpdate();
  8445. this.courseName = res.data[0][0].title;
  8446. this.courseText = res.data[0][0].brief;
  8447. this.evalua = res.data[0][0].evaId;
  8448. this.cover = JSON.parse(res.data[0][0].cover);
  8449. this.noneBtnImg = this.cover.length >= 1;
  8450. // this.checkboxList =
  8451. // res.data[0][0].course_student.length > 0
  8452. // ? JSON.parse(res.data[0][0].course_student)
  8453. // : [];
  8454. this.checkboxList2 = res.data[0][0].juri
  8455. ? res.data[0][0].juri.split(",")
  8456. : [];
  8457. this.inviteCode = [];
  8458. for (var i = 0; i < res.data[2].length; i++) {
  8459. this.inviteCode.push({
  8460. cid: res.data[2][i].classid,
  8461. ic: res.data[2][i].code,
  8462. });
  8463. }
  8464. this.checkboxList3 = res.data[0][0].course_teacher
  8465. ? res.data[0][0].course_teacher.split(",")
  8466. : [];
  8467. // this.isTeacherSee =
  8468. // res.data[0][0].is_teacher_look == 0 ? true : false;
  8469. this.isTeacherSee = res.data[0][0].open == 1 ? true : false;
  8470. this.myWord = res.data[0][0].template;
  8471. this.templateC.id = "123";
  8472. this.courseUserid = res.data[0][0].userid;
  8473. // if(this.courseUserid == this.userid){
  8474. // this.InviteChange(this.checkboxList2)
  8475. // }
  8476. this.nbOrder = res.data[0][0].ordernumber;
  8477. this.courseTypeId = [];
  8478. for (var i = 0; i < res.data[1].length; i++) {
  8479. this.courseTypeId.push(res.data[1][i].typeid);
  8480. }
  8481. console.log(this.courseTypeId);
  8482. // if (this.timer) clearInterval(this.timer);
  8483. if (this.timer) clearTimeout(this.timer);
  8484. this.timer = null;
  8485. // this.timer = setInterval(() => {
  8486. this.seleteCourseUpdate();
  8487. this.setMan();
  8488. this.selectAllType();
  8489. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[0].toolOpen = true
  8490. // }, 5000);
  8491. this.$forceUpdate();
  8492. setTimeout(() => {
  8493. this.checkEva(this.evalua);
  8494. setTimeout(() => {
  8495. this.checkEva(this.evalua);
  8496. }, 100);
  8497. }, 100);
  8498. })
  8499. .catch((err) => {
  8500. console.error(err);
  8501. });
  8502. }
  8503. },
  8504. seleteCourseUpdate() {
  8505. let params = {
  8506. cid: this.cid,
  8507. };
  8508. this.ajax
  8509. .get(this.$store.state.api + "select_course_detail", params)
  8510. .then((res) => {
  8511. // console.log(this.unitJson);
  8512. let unitJson = JSON.parse(res.data[0][0].chapters);
  8513. this.unitJson2 = JSON.parse(res.data[0][0].chapters);
  8514. let _unitJson2 = JSON.parse(JSON.stringify(this.unitJson));
  8515. let _unitJson = [];
  8516. let _chapAarry = [];
  8517. let _unitIndex = JSON.parse(JSON.stringify(this.unitIndex));
  8518. let _unitIndex2 = JSON.parse(JSON.stringify(this.unitIndex));
  8519. let index = 1;
  8520. let chapindex;
  8521. if (_unitJson2.length > unitJson.length) {
  8522. for (let c = 0; c < _unitJson2.length; c++) {
  8523. _chapAarry.push(_unitJson2[c].chapterInfo[0].chapterid);
  8524. }
  8525. for (let j = 0; j < unitJson.length; j++) {
  8526. let count = 0;
  8527. for (let k = 0; k < _unitJson2.length; k++) {
  8528. if (
  8529. unitJson[j].chapterInfo[0].chapterid ==
  8530. _unitJson2[k].chapterInfo[0].chapterid
  8531. ) {
  8532. count++;
  8533. _chapAarry.splice(
  8534. _chapAarry.indexOf(_unitJson2[k].chapterInfo[0].chapterid),
  8535. 1
  8536. );
  8537. _unitJson.push(unitJson[j]);
  8538. break;
  8539. }
  8540. }
  8541. // if(count === 0){
  8542. // this.$message.error("您所修改的阶段已经被其他老师删除了");
  8543. // }
  8544. }
  8545. for (let k = 0; k < _unitJson2.length; k++) {
  8546. if (_unitJson2[k].isUpdate == 1) {
  8547. _chapAarry.splice(
  8548. _chapAarry.indexOf(_unitJson2[k].chapterInfo[0].chapterid),
  8549. 1
  8550. );
  8551. _unitJson.push(_unitJson2[k]);
  8552. }
  8553. }
  8554. console.log(_chapAarry);
  8555. for (let d = 0; d < _unitJson2.length; d++) {
  8556. if (
  8557. _chapAarry.indexOf(_unitJson2[d].chapterInfo[0].chapterid) != -1
  8558. ) {
  8559. if (_unitIndex == d) {
  8560. index = 2;
  8561. }
  8562. chapindex = d;
  8563. // this.$message.error("您所修改的阶段已经被其他老师删除了");
  8564. }
  8565. }
  8566. } else {
  8567. _unitJson = JSON.parse(JSON.stringify(_unitJson2));
  8568. }
  8569. for (let i = 0; i < unitJson.length; i++) {
  8570. if (
  8571. (i < _unitJson.length - 1 || i == _unitJson.length - 1) &&
  8572. _unitJson[i].chapterInfo[0].chapterid !=
  8573. unitJson[i].chapterInfo[0].chapterid
  8574. ) {
  8575. if (i == _unitJson.length - 1) {
  8576. // this.unitIndex++
  8577. _unitIndex2++;
  8578. }
  8579. _unitJson.splice(i, 0, unitJson[i]);
  8580. } else if (i > _unitJson.length - 1) {
  8581. _unitJson.push(unitJson[i]);
  8582. } else if (
  8583. _unitJson[i].chapterInfo[0].chapterid ==
  8584. unitJson[i].chapterInfo[0].chapterid
  8585. ) {
  8586. _unitJson[i] = unitJson[i];
  8587. }
  8588. // if (i == _unitIndex) {
  8589. // continue;
  8590. // } else
  8591. }
  8592. if (_chapAarry.length && index != 2) {
  8593. if (chapindex < _unitIndex) {
  8594. this.isDelete = 2;
  8595. // this.unitIndex--;
  8596. _unitIndex2--;
  8597. } else if (
  8598. _unitJson2[_unitIndex].chapterInfo[0].chapterid !=
  8599. _unitJson[_unitIndex].chapterInfo[0].chapterid
  8600. ) {
  8601. this.isDelete = 2;
  8602. for (let n = 0; n < _unitJson.length; n++) {
  8603. if (
  8604. _unitJson2[_unitIndex].chapterInfo[0].chapterid ==
  8605. _unitJson[n].chapterInfo[0].chapterid
  8606. ) {
  8607. // this.unitIndex = n;
  8608. _unitIndex2 = n;
  8609. _unitJson[n] = _unitJson2[_unitIndex];
  8610. break;
  8611. }
  8612. }
  8613. }
  8614. } else if (index != 2) {
  8615. // _unitJson[this.unitIndex] = _unitJson2[_unitIndex];
  8616. _unitJson2[_unitIndex];
  8617. for (
  8618. var ci = 0;
  8619. ci < _unitJson2[_unitIndex].chapterInfo[0].taskJson.length;
  8620. ci++
  8621. ) {
  8622. _unitJson2[_unitIndex].chapterInfo[0].taskJson[ci].toolChoose =
  8623. _unitJson2[_unitIndex].chapterInfo[0].taskJson[ci].toolChoose
  8624. ? _unitJson2[_unitIndex].chapterInfo[0].taskJson[ci]
  8625. .toolChoose
  8626. : [];
  8627. let _chapterData = [];
  8628. for (
  8629. var c = 0;
  8630. c <
  8631. _unitJson2[_unitIndex].chapterInfo[0].taskJson[ci].chapterData
  8632. .length;
  8633. c++
  8634. ) {
  8635. if (
  8636. _unitJson2[_unitIndex].chapterInfo[0].taskJson[ci]
  8637. .chapterData[c]
  8638. ) {
  8639. _chapterData.push(
  8640. _unitJson2[_unitIndex].chapterInfo[0].taskJson[ci]
  8641. .chapterData[c]
  8642. );
  8643. }
  8644. }
  8645. _unitJson2[_unitIndex].chapterInfo[0].taskJson[ci].chapterData =
  8646. _chapterData;
  8647. }
  8648. _unitJson[_unitIndex2] = _unitJson2[_unitIndex];
  8649. }
  8650. if (index == 1) {
  8651. this.unitJson = _unitJson;
  8652. this.$forceUpdate();
  8653. setTimeout(() => {
  8654. if (this.unitIndex != _unitIndex2) {
  8655. this.isDelete = 2;
  8656. this.unitIndex = _unitIndex2;
  8657. }
  8658. }, 0);
  8659. this.timer = setTimeout(() => {
  8660. this.seleteCourseUpdate();
  8661. }, 1000);
  8662. } else if (index == 2) {
  8663. let _this = this;
  8664. _this
  8665. .$confirm(
  8666. "您所修改的阶段已经被其他老师删除了,需要恢复嘛?",
  8667. "提示",
  8668. {
  8669. confirmButtonText: "需要",
  8670. cancelButtonText: "取消",
  8671. type: "warning",
  8672. }
  8673. )
  8674. .then(() => {
  8675. if (_this.time()) {
  8676. _this.restoreWork(
  8677. _chapAarry[0],
  8678. _unitJson,
  8679. chapindex,
  8680. _unitJson2,
  8681. _unitIndex2
  8682. );
  8683. }
  8684. })
  8685. .catch(() => {
  8686. _this.unitJson = _unitJson;
  8687. _this.$forceUpdate();
  8688. setTimeout(() => {
  8689. if (this.unitIndex != _unitIndex2) {
  8690. this.isDelete = 2;
  8691. this.unitIndex = _unitIndex2;
  8692. }
  8693. }, 0);
  8694. _this.timer = setTimeout(() => {
  8695. _this.seleteCourseUpdate();
  8696. }, 1000);
  8697. });
  8698. }
  8699. })
  8700. .catch((err) => {
  8701. console.error(err);
  8702. });
  8703. },
  8704. restoreWork(chapid, unitJson, chapindex, unitJson2, unitIndex2) {
  8705. let params = [
  8706. {
  8707. cid: this.cid,
  8708. chapters: JSON.stringify(this.unitJson),
  8709. uid: this.userid,
  8710. chapid: chapid,
  8711. },
  8712. ];
  8713. this.ajax
  8714. .post(this.$store.state.api + "restoreWork", params)
  8715. .then((res) => {
  8716. this.$message({
  8717. message: "恢复成功",
  8718. type: "success",
  8719. });
  8720. unitJson.splice(chapindex, 0, unitJson2[chapindex]);
  8721. this.unitJson = unitJson;
  8722. this.$forceUpdate();
  8723. setTimeout(() => {
  8724. if (this.unitIndex != unitIndex2) {
  8725. this.isDelete = 2;
  8726. this.unitIndex = unitIndex2;
  8727. }
  8728. }, 0);
  8729. this.timer = setTimeout(() => {
  8730. this.seleteCourseUpdate();
  8731. }, 1000);
  8732. })
  8733. .catch((err) => {
  8734. this.$message.error("网络不佳");
  8735. console.error(err);
  8736. });
  8737. },
  8738. getTypeName() {
  8739. console.log(this.courseTypeId);
  8740. this.$forceUpdate();
  8741. },
  8742. selectAllType() {
  8743. let params = {
  8744. org: this.org && this.org != "" ? this.org : "",
  8745. oid: this.oid && this.oid != "" ? this.oid : "",
  8746. };
  8747. this.ajax
  8748. .get(this.$store.state.api + "selectAllType", params)
  8749. .then((res) => {
  8750. if (this.oid == "69893dca-1d47-11ed-8c78-005056b86db5") {
  8751. res.data[0] = [...res.data[0], ...res.data[4]]
  8752. }
  8753. this.CourseType = res.data;
  8754. this.CourseType2 = [
  8755. { name: "智见课程", id: [] },
  8756. { name: "智行课程", id: [] },
  8757. { name: "智创课程", id: [] },
  8758. ];
  8759. for (var cti = 0; cti < res.data[0].length; cti++) {
  8760. if (
  8761. res.data[0][cti].id == "34628934-d02f-11ec-8c78-005056b86db5" ||
  8762. res.data[0][cti].id == "34629907-d02f-11ec-8c78-005056b86db5"
  8763. ) {
  8764. this.CourseType2[0].id.push(res.data[0][cti].id);
  8765. } else if (res.data[0][cti].id == "34628934-d02f-11ec-8c78-005056b86ac5" ||
  8766. res.data[0][cti].id == "34629907-d02f-11ec-8c78-005056b86ac5") {
  8767. this.CourseType2[1].id.push(res.data[0][cti].id);
  8768. } else if (res.data[0][cti].id == "34629bcc-d02f-11ec-8c78-005056b86db5") {
  8769. this.CourseType2[2].id.push(res.data[0][cti].id);
  8770. }
  8771. if (res.data[0][cti].id == "34628934-d02f-11ec-8c78-005056b86db5" || res.data[0][cti].id == "34628934-d02f-11ec-8c78-005056b86ac5") {
  8772. res.data[0][cti].name = "年级";
  8773. } else if (res.data[0][cti].id == "34629907-d02f-11ec-8c78-005056b86db5" || res.data[0][cti].id == "34629907-d02f-11ec-8c78-005056b86ac5") {
  8774. res.data[0][cti].name = "学科";
  8775. } else if (res.data[0][cti].id == "34629bcc-d02f-11ec-8c78-005056b86db5") {
  8776. res.data[0][cti].name = "主题";
  8777. }
  8778. }
  8779. let _courseTypeId = [];
  8780. for (var i = 0; i < res.data[0].length; i++) {
  8781. if (!this.cid) {
  8782. this.courseTypeId[res.data[0][i].id] = [];
  8783. }
  8784. // if (!this.CourseTypeJson[res.data[0][i].id]) {
  8785. // }
  8786. this.CourseTypeJson[res.data[0][i].id] = [];
  8787. if (this.oid == "69893dca-1d47-11ed-8c78-005056b86db5") {
  8788. if (res.data[0][i].name == "栏目") {
  8789. this.CourseType[0][i].name = "主题";
  8790. }
  8791. }
  8792. if (res.data[2].length == 0 && res.data[3].length == 0) {
  8793. for (var j = 0; j < res.data[1].length; j++) {
  8794. if (
  8795. this.courseTypeId.indexOf(res.data[1][j].id) != -1 &&
  8796. _courseTypeId.indexOf(res.data[1][j].id) == -1
  8797. ) {
  8798. _courseTypeId.push(res.data[1][j].id);
  8799. }
  8800. if (res.data[0][i].id == res.data[1][j].pid) {
  8801. this.CourseTypeJson[res.data[0][i].id].push(res.data[1][j]); // 去除公共分类
  8802. }
  8803. }
  8804. } else {
  8805. if (res.data[2].length > 0) {
  8806. for (var j = 0; j < res.data[2].length; j++) {
  8807. if (
  8808. this.courseTypeId.indexOf(res.data[2][j].id) != -1 &&
  8809. _courseTypeId.indexOf(res.data[2][j].id) == -1
  8810. ) {
  8811. _courseTypeId.push(res.data[2][j].id);
  8812. }
  8813. if (res.data[0][i].id == res.data[2][j].pid) {
  8814. this.CourseTypeJson[res.data[0][i].id].push(res.data[2][j]); // 去除公共分类
  8815. }
  8816. }
  8817. }
  8818. if (res.data[3].length > 0) {
  8819. for (var j = 0; j < res.data[3].length; j++) {
  8820. if (
  8821. this.courseTypeId.indexOf(res.data[3][j].id) != -1 &&
  8822. _courseTypeId.indexOf(res.data[3][j].id) == -1
  8823. ) {
  8824. _courseTypeId.push(res.data[3][j].id);
  8825. }
  8826. if (res.data[0][i].id == res.data[3][j].pid) {
  8827. this.CourseTypeJson[res.data[0][i].id].push(res.data[3][j]); // 去除公共分类
  8828. }
  8829. }
  8830. }
  8831. }
  8832. }
  8833. this.courseTypeId = _courseTypeId;
  8834. })
  8835. .catch((err) => {
  8836. console.error(err);
  8837. });
  8838. },
  8839. selectType() {
  8840. this.ajax
  8841. .get(this.$store.state.api + "selectType")
  8842. .then((res) => {
  8843. this.CourseType = res.data;
  8844. for (var i = 0; i < res.data[0].length; i++) {
  8845. if (!this.cid) {
  8846. this.courseTypeId[res.data[0][i].id] = "";
  8847. }
  8848. if (this.oid == "69893dca-1d47-11ed-8c78-005056b86db5") {
  8849. if (res.data[0][i].name == "栏目") {
  8850. this.CourseType[0][i].name = "主题";
  8851. }
  8852. }
  8853. for (var j = 0; j < res.data[1].length; j++) {
  8854. if (res.data[0][i].id == res.data[1][j].pid) {
  8855. if (!this.CourseTypeJson[res.data[0][i].id]) {
  8856. this.CourseTypeJson[res.data[0][i].id] = [];
  8857. }
  8858. this.CourseTypeJson[res.data[0][i].id].push(res.data[1][j]); // 去除公共分类
  8859. }
  8860. }
  8861. }
  8862. this.selectTypeByOid();
  8863. this.selectTypeByOrg();
  8864. })
  8865. .catch((err) => {
  8866. console.error(err);
  8867. });
  8868. },
  8869. selectTypeByOid() {
  8870. let params = {
  8871. oid: this.oid,
  8872. };
  8873. this.ajax
  8874. .get(this.$store.state.api + "selectTypeByOid", params)
  8875. .then((res) => {
  8876. for (var i = 0; i < res.data[0].length; i++) {
  8877. for (var j = 0; j < res.data[1].length; j++) {
  8878. if (res.data[0][i].id == res.data[1][j].pid) {
  8879. if (!this.CourseTypeJson[res.data[0][i].id]) {
  8880. this.CourseTypeJson[res.data[0][i].id] = [];
  8881. }
  8882. this.CourseTypeJson[res.data[0][i].id].push(res.data[1][j]);
  8883. }
  8884. }
  8885. }
  8886. })
  8887. .catch((err) => {
  8888. console.error(err);
  8889. });
  8890. },
  8891. selectTypeByOrg() {
  8892. let params = {
  8893. oid: this.org,
  8894. };
  8895. this.ajax
  8896. .get(this.$store.state.api + "selectTypeByOrg", params)
  8897. .then((res) => {
  8898. for (var i = 0; i < res.data[0].length; i++) {
  8899. for (var j = 0; j < res.data[1].length; j++) {
  8900. if (res.data[0][i].id == res.data[1][j].pid) {
  8901. if (!this.CourseTypeJson[res.data[0][i].id]) {
  8902. this.CourseTypeJson[res.data[0][i].id] = [];
  8903. }
  8904. this.CourseTypeJson[res.data[0][i].id].push(res.data[1][j]);
  8905. }
  8906. }
  8907. }
  8908. this.$forceUpdate();
  8909. })
  8910. .catch((err) => {
  8911. console.error(err);
  8912. });
  8913. },
  8914. OtherMb(type, task) {
  8915. if(task === 0 || task){
  8916. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[task].isEvaFold = true;
  8917. }
  8918. this.typeMode = type;
  8919. setTimeout(() => {
  8920. this.checkEva(this.checkId);
  8921. setTimeout(() => {
  8922. this.checkEva(this.checkId);
  8923. }, 100);
  8924. }, 100);
  8925. },
  8926. openMember() {
  8927. this.searchTN = "";
  8928. this.getTeacher();
  8929. this.dialogVisibleMember = true;
  8930. },
  8931. checkEva(id, type) {
  8932. this.dialogVisiblemb = false;
  8933. this.selectEva();
  8934. if (this.evalua != id && type == 2) {
  8935. this.$message.success("导入成功");
  8936. setTimeout(() => {
  8937. this.checkEva(id)
  8938. }, 100);
  8939. }
  8940. this.evalua = id;
  8941. this.checkId = id;
  8942. if (this.evalua != "") {
  8943. for (var i = 0; i < this.evaJuri.length; i++) {
  8944. if (this.evalua == this.evaJuri[i].id) {
  8945. this.eTitle = this.evaJuri[i].title;
  8946. this.eJson = JSON.parse(this.evaJuri[i].content);
  8947. }
  8948. }
  8949. this.data.data = [];
  8950. this.$forceUpdate();
  8951. setTimeout(() => {
  8952. this.setMindData();
  8953. }, 1000);
  8954. }
  8955. },
  8956. deleteEva() {
  8957. let _this = this;
  8958. if (_this.evalua == "") {
  8959. this.$message.warning("内容已经清空了,请勿重复清空");
  8960. return;
  8961. }
  8962. _this
  8963. .$confirm("确定删除此目标吗?", "提示", {
  8964. confirmButtonText: "确定",
  8965. cancelButtonText: "取消",
  8966. type: "warning",
  8967. })
  8968. .then(() => {
  8969. _this.evalua = "";
  8970. _this.checkId = "";
  8971. _this.eTitle = "";
  8972. let _unitJson = _this.unitJson;
  8973. for (var i = 0; i < _unitJson.length; i++) {
  8974. let _task = _unitJson[i].chapterInfo[0].taskJson;
  8975. for (var j = 0; j < _task.length; j++) {
  8976. let _eList = _task[j].eList;
  8977. for (var k = 0; k < _eList.length; k++) {
  8978. delete _eList[k].target;
  8979. }
  8980. }
  8981. }
  8982. _this.$forceUpdate();
  8983. if (_this.cid) {
  8984. _this.updateWork();
  8985. }
  8986. })
  8987. .catch(() => {
  8988. return;
  8989. });
  8990. },
  8991. selectEva() {
  8992. let params = {
  8993. oid: this.oid,
  8994. };
  8995. this.ajax
  8996. .get(this.$store.state.api + "selectAllEvaluation", params)
  8997. .then((res) => {
  8998. this.evaJuri = res.data[0];
  8999. })
  9000. .catch((err) => {
  9001. console.error(err);
  9002. });
  9003. },
  9004. setMindData() {
  9005. let targetArray = [];
  9006. this.data.data = [];
  9007. this.data.data.push({ id: "root", isroot: true, topic: this.eTitle });
  9008. let _eJson = Object.keys(this.eJson);
  9009. let _e = this.eJson;
  9010. for (let i = 0; i < _eJson.length; i++) {
  9011. let element = _e[_eJson[i]];
  9012. this.data.data.push({
  9013. id: element.id,
  9014. parentid: "root",
  9015. topic: element.name,
  9016. });
  9017. // targetArray.push({
  9018. // id: element.id,
  9019. // parentid: "root",
  9020. // name: element.name,
  9021. // });
  9022. targetArray.push({
  9023. value: element.name,
  9024. label: element.name,
  9025. children: [],
  9026. });
  9027. let _eJsonc = Object.keys(element.child);
  9028. let _e2 = element.child;
  9029. for (let j = 0; j < _eJsonc.length; j++) {
  9030. let _ec = _e2[_eJsonc[j]];
  9031. this.data.data.push({
  9032. id: _ec.id,
  9033. parentid: element.id,
  9034. topic: _ec.name,
  9035. });
  9036. // targetArray.push({
  9037. // id: _ec.id,
  9038. // parentid: element.id,
  9039. // name: _ec.name,
  9040. // });
  9041. targetArray[i].children.push({
  9042. value: _ec.name,
  9043. label: _ec.name,
  9044. children: [],
  9045. });
  9046. let _eJsonz = Object.keys(_ec.child);
  9047. let _e3 = _ec.child;
  9048. for (let z = 0; z < _eJsonz.length; z++) {
  9049. let _ez = _e3[_eJsonz[z]];
  9050. this.data.data.push({
  9051. id: _ez.id,
  9052. parentid: _ec.id,
  9053. topic: _ez.name,
  9054. });
  9055. // targetArray.push({
  9056. // id: _ez.id,
  9057. // parentid: _ec.id,
  9058. // name: _ez.name,
  9059. // });
  9060. targetArray[i].children[j].children.push({
  9061. value: _ez.name,
  9062. label: _ez.name,
  9063. });
  9064. }
  9065. }
  9066. }
  9067. this.targetArray = targetArray;
  9068. this.$forceUpdate();
  9069. },
  9070. /*添加评价 */
  9071. addEList(index, tIndex) {
  9072. this.unitJson[index].chapterInfo[0].taskJson[tIndex].eList
  9073. ? this.unitJson[index].chapterInfo[0].taskJson[tIndex].eList.push({
  9074. value: "",
  9075. detail: "",
  9076. score: 5,
  9077. })
  9078. : (this.unitJson[index].chapterInfo[0].taskJson[tIndex].eList = [
  9079. { value: "", detail: "", score: 5 },
  9080. ]);
  9081. this.$forceUpdate();
  9082. },
  9083. forceUpdate() {
  9084. this.$forceUpdate();
  9085. },
  9086. deletEList(index, tIndex, eIndex) {
  9087. this.unitJson[index].chapterInfo[0].taskJson[tIndex].eList.splice(
  9088. eIndex,
  9089. 1
  9090. );
  9091. this.$forceUpdate();
  9092. },
  9093. getChoosePic(t) {
  9094. this.chooseType = t;
  9095. this.getAllBanner();
  9096. },
  9097. getAllBanner() {
  9098. this.sysPicVisible = true;
  9099. let params = {
  9100. t: this.chooseType,
  9101. };
  9102. this.ajax
  9103. .get(this.$store.state.api + "selectAllBanner", params)
  9104. .then((res) => {
  9105. this.sysPic = res.data[0];
  9106. })
  9107. .catch((err) => {
  9108. console.error(err);
  9109. });
  9110. },
  9111. // getClass() {
  9112. // let params = {
  9113. // oid: this.oid,
  9114. // };
  9115. // this.ajax
  9116. // .get(this.$store.state.api + "selectClassBySchool", params)
  9117. // .then((res) => {
  9118. // this.classJuri = res.data[0];
  9119. // })
  9120. // .catch((err) => {
  9121. // console.error(err);
  9122. // });
  9123. // },
  9124. deleteSysPic() {
  9125. this.cover = [];
  9126. this.isSysPic = false;
  9127. this.isSysPic2 = false;
  9128. },
  9129. deleteSelectPic() {
  9130. this.selectJson.url = "";
  9131. },
  9132. setEListStar() {
  9133. this.$forceUpdate();
  9134. },
  9135. deletRateList(i) {
  9136. this.rateJson.splice(i, 1);
  9137. },
  9138. addRateList() {
  9139. this.rateJson.push({ detail: "", score: 5, value: "" });
  9140. },
  9141. addSt() {
  9142. this.sentenceList.push({
  9143. sentenceTitle: "",
  9144. addSentence: [],
  9145. rightAnswer: [],
  9146. });
  9147. },
  9148. addSen(i) {
  9149. if (!this.sentenceList[i].sentenceTitle) {
  9150. this.$message.error("请填写卡片内容!");
  9151. return;
  9152. }
  9153. if (this.sentenceList[i].sentenceTitle.length > 10) {
  9154. this.$message.error("卡片内容字数不能超过10位");
  9155. return;
  9156. }
  9157. if (this.sentenceList[i].addSentence.indexOf(this.sentenceList[i].sentenceTitle) !== -1) {
  9158. this.$message.error("不能添加重复的卡片内容!");
  9159. return;
  9160. }
  9161. this.sentenceList[i].addSentence.push(this.sentenceList[i].sentenceTitle);
  9162. // this.isPushTitleList.push(this.sentenceTitle);
  9163. this.sentenceList[i].sentenceTitle = "";
  9164. },
  9165. setRightAnswer(s, i, j) {
  9166. if (this.sentenceList[i].rightAnswer.indexOf(s) == -1) {
  9167. this.sentenceList[i].rightAnswer.push(s);
  9168. }
  9169. },
  9170. returnCard(r, i, j) {
  9171. this.sentenceList[i].rightAnswer.splice(j, 1);
  9172. },
  9173. addSentenceTool() {
  9174. for (var i = 0; i < this.sentenceList.length; i++) {
  9175. if (this.sentenceList[i].rightAnswer.length == 0) {
  9176. this.$message.error(`请将题目${i + 1}设置完整。`);
  9177. return;
  9178. }
  9179. if (
  9180. this.sentenceList[i].addSentence.length !=
  9181. this.sentenceList[i].rightAnswer.length
  9182. ) {
  9183. this.$message.error(`请将题目${i + 1}设置完整。`);
  9184. return;
  9185. }
  9186. }
  9187. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  9188. this.taskCount
  9189. ].toolChoose[this.toolIndex].sentenceList = this.sentenceList;
  9190. this.sentenceList = [
  9191. { sentenceTitle: "", addSentence: [], rightAnswer: [] },
  9192. ];
  9193. this.dialogVisibleSentence = false;
  9194. // this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  9195. // itemTaskIndex
  9196. // ].toolChoose[toolIndex].tool = [];
  9197. // this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  9198. // itemTaskIndex
  9199. // ].toolChoose[toolIndex].tool.push(i);
  9200. if (
  9201. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[this.taskCount]
  9202. .toolChoose[this.toolIndex].tool != 47
  9203. ) {
  9204. this.addTools(47, this.taskCount, this.toolIndex);
  9205. }
  9206. },
  9207. addTableJson() {
  9208. // if (this.tableJson.text == "" || this.tableJson.text == "<p></p>") {
  9209. // this.$message.error("请将信息填写完整!");
  9210. // return;
  9211. // }
  9212. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  9213. this.taskCount
  9214. ].toolChoose[this.toolIndex].tableJson = this.tableJson;
  9215. // this.tableJson = [{ text: "" }];
  9216. // this.dialogVisibleTable = false;
  9217. this.$message.success("上传成功");
  9218. if (
  9219. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[this.taskCount]
  9220. .toolChoose[this.toolIndex].tool != 48
  9221. ) {
  9222. this.addTools(48, this.taskCount, this.toolIndex);
  9223. }
  9224. },
  9225. addWordJson() {
  9226. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  9227. this.taskCount
  9228. ].toolChoose[this.toolIndex].wordJson = this.wordJson;
  9229. // this.wordJson = [{ text: "" }];
  9230. // this.dialogVisibleWord = false;
  9231. this.$message.success("上传成功");
  9232. if (
  9233. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[this.taskCount]
  9234. .toolChoose[this.toolIndex].tool != 52
  9235. ) {
  9236. this.addTools(52, this.taskCount, this.toolIndex);
  9237. }
  9238. },
  9239. addMoreUpload() {
  9240. if (this.uploadJson.length == 0) {
  9241. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  9242. this.taskCount
  9243. ].toolChoose[this.toolIndex].uploadJson = [];
  9244. } else {
  9245. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  9246. this.taskCount
  9247. ].toolChoose[this.toolIndex].uploadJson = this.uploadJson;
  9248. }
  9249. this.uploadJson = [];
  9250. this.dialogVisibleMoreUpload = false;
  9251. if (
  9252. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[this.taskCount]
  9253. .toolChoose[this.toolIndex].tool != 50
  9254. ) {
  9255. this.addTools(50, this.taskCount, this.toolIndex);
  9256. }
  9257. },
  9258. addPreTime() {
  9259. if (this.preTime == 0) {
  9260. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  9261. this.taskCount
  9262. ].toolChoose[this.toolIndex].preTime = 0;
  9263. } else {
  9264. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  9265. this.taskCount
  9266. ].toolChoose[this.toolIndex].preTime = this.preTime;
  9267. }
  9268. this.preTime = 0;
  9269. this.dialogVisiblePreTime = false;
  9270. if (
  9271. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[this.taskCount]
  9272. .toolChoose[this.toolIndex].tool != 10
  9273. ) {
  9274. this.addTools(10, this.taskCount, this.toolIndex);
  9275. }
  9276. },
  9277. goToTask(i) {
  9278. this.toolIndexType = ''
  9279. if (this.isClickColor == (i + 1)) {
  9280. if (this.unitJson[this.unitIndex].chapterInfo[0].taskJson[i].toolOpen) {
  9281. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[i].toolOpen = false
  9282. } else {
  9283. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[i].toolOpen = true
  9284. }
  9285. this.$forceUpdate();
  9286. return;
  9287. }
  9288. if (this.unitJson[this.unitIndex].chapterInfo[0].taskJson[i].toolOpen) {
  9289. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[i].toolOpen = false
  9290. } else {
  9291. document.querySelectorAll(".basic_box")[0].scrollTop =
  9292. document.querySelectorAll(".taskBorder")[i].offsetTop - 100;
  9293. this.isClickColor = i + 1;
  9294. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[i].toolOpen = true
  9295. }
  9296. this.$forceUpdate();
  9297. },
  9298. goToTask2(i, stage) {
  9299. this.toolIndexType = ''
  9300. if (this.isClickColor == (i + 1) && this.unitIndex == stage) {
  9301. if (this.unitJson[this.unitIndex].chapterInfo[0].taskJson[i].toolOpen) {
  9302. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[i].toolOpen = false
  9303. } else {
  9304. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[i].toolOpen = true
  9305. }
  9306. this.$forceUpdate();
  9307. return;
  9308. }
  9309. if(this.unitIndex != stage){
  9310. if(this.panUnitJson() == 2){
  9311. return;
  9312. }
  9313. this.unitSet(stage)
  9314. }
  9315. if (this.unitJson[this.unitIndex].chapterInfo[0].taskJson[i].toolOpen) {
  9316. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[i].toolOpen = false
  9317. } else {
  9318. document.querySelectorAll(".basic_box")[0].scrollTop =
  9319. document.querySelectorAll(".taskBorder")[i].offsetTop - 100;
  9320. this.isClickColor = i + 1;
  9321. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[i].toolOpen = true
  9322. }
  9323. this.$forceUpdate();
  9324. },
  9325. taskMove(type, index) {
  9326. this.$confirm(
  9327. "切换任务顺序将删除所有工具的提交成果,是否继续此操作?",
  9328. "提示",
  9329. {
  9330. confirmButtonText: "确定",
  9331. cancelButtonText: "取消",
  9332. type: "warning",
  9333. }
  9334. )
  9335. .then(() => {
  9336. if (type == 1) {
  9337. if (index > 0) {
  9338. let a = JSON.parse(
  9339. JSON.stringify(
  9340. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  9341. index - 1
  9342. ]
  9343. )
  9344. );
  9345. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[index - 1] =
  9346. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[index];
  9347. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[index] = a;
  9348. }
  9349. } else {
  9350. if (
  9351. index <
  9352. this.unitJson[this.unitIndex].chapterInfo[0].taskJson.length - 1
  9353. ) {
  9354. let a = JSON.parse(
  9355. JSON.stringify(
  9356. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  9357. index + 1
  9358. ]
  9359. )
  9360. );
  9361. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[index + 1] =
  9362. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[index];
  9363. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[index] = a;
  9364. }
  9365. }
  9366. this.$forceUpdate();
  9367. })
  9368. .catch(() => {
  9369. return;
  9370. });
  9371. },
  9372. stageMove(type, index) {
  9373. if (type == 1) {
  9374. if (index > 0) {
  9375. let a = JSON.parse(
  9376. JSON.stringify(
  9377. this.unitJson3[index - 1]
  9378. )
  9379. );
  9380. let acid = JSON.parse(JSON.stringify(this.unitJson3[index - 1].chapterInfo[0].chapterid))
  9381. let bcid = JSON.parse(JSON.stringify(this.unitJson3[index].chapterInfo[0].chapterid))
  9382. this.unitJson3[index - 1] = this.unitJson3[index];
  9383. this.unitJson3[index] = a;
  9384. this.unitJson3[index - 1].chapterInfo[0].chapterid = acid;
  9385. this.unitJson3[index].chapterInfo[0].chapterid = bcid;
  9386. }
  9387. } else {
  9388. if (
  9389. index <
  9390. this.unitJson3.length - 1
  9391. ) {
  9392. let a = JSON.parse(
  9393. JSON.stringify(
  9394. this.unitJson3[
  9395. index + 1
  9396. ]
  9397. )
  9398. );
  9399. let acid = JSON.parse(JSON.stringify(this.unitJson3[index + 1].chapterInfo[0].chapterid))
  9400. let bcid = JSON.parse(JSON.stringify(this.unitJson3[index].chapterInfo[0].chapterid))
  9401. this.unitJson3[index + 1] =
  9402. this.unitJson3[index];
  9403. this.unitJson3[index] = a;
  9404. this.unitJson3[index + 1].chapterInfo[0].chapterid = acid;
  9405. this.unitJson3[index].chapterInfo[0].chapterid = bcid;
  9406. }
  9407. }
  9408. this.$forceUpdate();
  9409. },
  9410. addGroup(i) {
  9411. // this.groupJson.group.splice(i + 1, 0, { name: "第"+(i+1)+"组" });
  9412. this.groupJson.group.push({
  9413. name: "第" + (this.groupJson.group.length + 1) + "组",
  9414. });
  9415. },
  9416. deleteGroup(i) {
  9417. this.groupJson.group.splice(i, 1);
  9418. },
  9419. numberPan() {
  9420. if (/[^\d]/.test(this.groupJson.number) || this.groupJson.number < 2 || this.groupJson.number > 10) {
  9421. this.$message.error('请输入2-10的数字')
  9422. this.groupJson.number = ''
  9423. }
  9424. },
  9425. addGroupJson() {
  9426. for (var i = 0; i < this.groupJson.group.length; i++) {
  9427. if (!this.groupJson.group[i].name) {
  9428. this.$message.error("请将信息填写完整!");
  9429. return;
  9430. }
  9431. }
  9432. if (!this.groupJson.number) {
  9433. this.$message.error("请将信息填写完整!");
  9434. return;
  9435. }
  9436. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  9437. this.taskCount
  9438. ].toolChoose[this.toolIndex].groupJson = JSON.parse(
  9439. JSON.stringify(this.groupJson)
  9440. );
  9441. this.dialogVisibleGroup = false;
  9442. this.groupJson = {};
  9443. if (
  9444. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[this.taskCount]
  9445. .toolChoose[this.toolIndex].tool != 49
  9446. ) {
  9447. this.addTools(49, this.taskCount, this.toolIndex);
  9448. }
  9449. },
  9450. updateTime(preTime) {
  9451. this.preTime = preTime;
  9452. },
  9453. InviteChange(val) {
  9454. console.log(val);
  9455. let _check = []
  9456. let _check2 = []
  9457. for (var i = 0; i < this.grade2.length; i++) {
  9458. var gid = this.grade2[i].id
  9459. _check.push(gid)
  9460. }
  9461. for (var i = 0; i < this.checkboxList2.length; i++) {
  9462. var _id = this.checkboxList2[i]
  9463. if (_check.indexOf(_id) !== -1) {
  9464. _check2.push(_id)
  9465. }
  9466. }
  9467. this.checkAll = _check2.length === _check.length;
  9468. return;
  9469. let array = JSON.parse(JSON.stringify(val));
  9470. this.inviteCode = this.inviteCode.filter((el) => {
  9471. if (val.indexOf(el.cid) != -1) {
  9472. array.splice(array.indexOf(el.cid), 1);
  9473. return el;
  9474. }
  9475. });
  9476. for (var i = 0; i < array.length; i++) {
  9477. this.getInviteCode(array[i]);
  9478. }
  9479. },
  9480. handleCheckAllChange(val) {
  9481. if (val) {
  9482. for (var i = 0; i < this.grade2.length; i++) {
  9483. var gid = this.grade2[i].id
  9484. if (this.checkboxList2.indexOf(gid) === -1) {
  9485. this.checkboxList2.push(gid)
  9486. }
  9487. }
  9488. } else {
  9489. let _check = []
  9490. let _check2 = []
  9491. for (var i = 0; i < this.grade2.length; i++) {
  9492. var gid = this.grade2[i].id
  9493. _check.push(gid)
  9494. }
  9495. for (var i = 0; i < this.checkboxList2.length; i++) {
  9496. var _id = this.checkboxList2[i]
  9497. if (_check.indexOf(_id) === -1) {
  9498. _check2.push(_id)
  9499. }
  9500. }
  9501. this.checkboxList2 = _check2
  9502. }
  9503. this.isIndeterminate = false;
  9504. },
  9505. async getInviteCode(cid) {
  9506. let code = this.randomNumber();
  9507. let params = {
  9508. code: code,
  9509. oid: this.oid,
  9510. };
  9511. let type = 1;
  9512. for (var i = 0; i < this.inviteCode.length; i++) {
  9513. if (this.inviteCode[i].cid != cid && code == this.inviteCode[i].ic) {
  9514. type = 2;
  9515. }
  9516. }
  9517. if (type == 2) {
  9518. this.getInviteCode(cid);
  9519. return;
  9520. }
  9521. const res = await this.ajax.get(
  9522. this.$store.state.api + "selectInviteCode2",
  9523. params
  9524. );
  9525. if (
  9526. res.data.length &&
  9527. res.data[0].length &&
  9528. res.data[0][0].courseId != this.cid
  9529. ) {
  9530. this.getInviteCode(cid);
  9531. return;
  9532. }
  9533. let array = [];
  9534. for (var i = 0; i < this.inviteCode.length; i++) {
  9535. array.push(this.inviteCode[i].cid);
  9536. }
  9537. if (array.indexOf(cid) != -1) {
  9538. this.inviteCode[array.indexOf(cid)].ic = code;
  9539. } else {
  9540. this.inviteCode.push({ cid: cid, ic: code });
  9541. }
  9542. },
  9543. OpenInviteD(cid) {
  9544. let array = [];
  9545. this.icode = "";
  9546. for (var i = 0; i < this.inviteCode.length; i++) {
  9547. array.push(this.inviteCode[i].cid);
  9548. }
  9549. if (array.indexOf(cid) != -1) {
  9550. this.icode = this.inviteCode[array.indexOf(cid)].ic;
  9551. }
  9552. this.inviteId = cid;
  9553. this.dialogVisibleInvite = true;
  9554. },
  9555. addInvite() {
  9556. let reg = /^[A-Za-z0-9]{4,}$/;
  9557. if (!reg.test(this.icode)) {
  9558. this.$message.error("请输入至少四位数字或英文组合的随机码");
  9559. return;
  9560. }
  9561. let type = 1;
  9562. for (var i = 0; i < this.inviteCode.length; i++) {
  9563. if (
  9564. this.inviteCode[i].cid != this.inviteId &&
  9565. this.icode == this.inviteCode[i].ic
  9566. ) {
  9567. type = 2;
  9568. }
  9569. }
  9570. if (type == 2) {
  9571. this.$message.error("已有此随机码,不能重复");
  9572. return;
  9573. }
  9574. let params = {
  9575. code: this.icode,
  9576. oid: this.oid,
  9577. };
  9578. this.ajax
  9579. .get(this.$store.state.api + "selectInviteCode", params)
  9580. .then((res) => {
  9581. if (
  9582. res.data.length &&
  9583. res.data[0].length &&
  9584. res.data[0][0].courseId != this.cid
  9585. ) {
  9586. this.$message.error("已有此随机码,不能重复");
  9587. return;
  9588. }
  9589. let array = [];
  9590. for (var i = 0; i < this.inviteCode.length; i++) {
  9591. array.push(this.inviteCode[i].cid);
  9592. }
  9593. if (array.indexOf(this.inviteId) != -1) {
  9594. this.inviteCode[array.indexOf(this.inviteId)].ic = this.icode;
  9595. } else {
  9596. this.inviteCode.push({ cid: this.inviteId, ic: this.icode });
  9597. }
  9598. this.icode = "";
  9599. this.dialogVisibleInvite = false;
  9600. })
  9601. .catch((err) => {
  9602. console.error(err);
  9603. });
  9604. },
  9605. randomNumber() {
  9606. // 随机生成两位数
  9607. // let num = Math.floor(Math.random() * 900) + 100;
  9608. // 生成 0 到 99 之间的随机整数
  9609. const randomNumber = Math.floor(Math.random() * 100);
  9610. // 如果随机数小于 10,补上前导零
  9611. const num =
  9612. randomNumber < 10 ? "0" + randomNumber : randomNumber.toString();
  9613. // 随机生成两个大写字母
  9614. let letters = "";
  9615. let chars2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
  9616. for (let i = 0; i < 3; i++) {
  9617. letters += chars2.charAt(Math.floor(Math.random() * chars2.length));
  9618. }
  9619. // 随机生成两位数字和字母的组合
  9620. let mix = "";
  9621. let chars =
  9622. "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
  9623. for (let i = 0; i < 3; i++) {
  9624. let char = chars.charAt(Math.floor(Math.random() * chars.length));
  9625. mix += char;
  9626. }
  9627. // 随机选择一种类型
  9628. let type = Math.floor(Math.random() * 3);
  9629. return num;
  9630. // 根据类型输出结果
  9631. switch (type) {
  9632. case 0:
  9633. console.log(num); // 输出两位数
  9634. return num;
  9635. case 1:
  9636. console.log(letters); // 输出两个大写字母
  9637. return letters;
  9638. case 2:
  9639. console.log(mix); // 输出两位数字和字母的组合
  9640. return mix;
  9641. }
  9642. },
  9643. getPaste() {
  9644. let iframe = top.document.querySelectorAll("#AIChat iframe")[0];
  9645. if (!iframe) {
  9646. return;
  9647. }
  9648. let copyData = iframe.contentWindow.copyData;
  9649. if (copyData && copyData.stageData && copyData.stageData.length) {
  9650. this.isPasteStage = true
  9651. }
  9652. if (copyData && copyData.selectData.length) {
  9653. this.isPasteChoice = true
  9654. }
  9655. if (copyData && copyData.tasksData && copyData.tasksData.length) {
  9656. this.isPasteTask = true
  9657. }
  9658. },
  9659. searchImage() {
  9660. var _this = this;
  9661. _this.imageList = []
  9662. if (!_this.searchImageValue) {
  9663. _this.sysPicVisible2 = true
  9664. return
  9665. }
  9666. _this.imageloading = true
  9667. _this.ajax.post('https://gpt.cocorobo.cn/search_image', {
  9668. page: _this.ppage,
  9669. pagesize: 9,
  9670. query: _this.searchImageValue
  9671. }).then(function (response) {
  9672. // console.log(response.data.data);
  9673. var data = response.data.FunctionResponse.result;
  9674. for (var i = 0; i < data.length; i++) {
  9675. _this.imageList.push({ url: data[i].thumbnail })
  9676. }
  9677. _this.imageloading = false
  9678. }).catch(function (error) {
  9679. console.log(error);
  9680. });
  9681. _this.sysPicVisible2 = true
  9682. },
  9683. changePicture() {
  9684. this.ppage++
  9685. this.searchImage()
  9686. },
  9687. resetImage() {
  9688. this.ppage = 1
  9689. this.searchImage()
  9690. },
  9691. jumpGj(i, j) {
  9692. if ((i + 1) != this.isClickColor) {
  9693. this.isClickColor = (i + 1)
  9694. }
  9695. var a = document.scrollingElement;
  9696. this.toolIndexType = `gj${i}${j}`
  9697. let target = document.querySelector(`#gj${i}${j}`);
  9698. if (target) {
  9699. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[i].isFold = 0;
  9700. setTimeout(() => {
  9701. target.scrollIntoView(true);
  9702. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[i].toolChoose[j].isFold3 = false
  9703. setTimeout(() => {
  9704. this.$refs.unitBox.scrollTop = this.$refs.unitBox.scrollTop - 100;
  9705. }, 0);
  9706. }, 0);
  9707. }
  9708. },
  9709. jumpGj2(i, j, k) {
  9710. if(this.unitIndex != k){
  9711. if(this.panUnitJson() == 2){
  9712. return;
  9713. }
  9714. this.unitSet(k)
  9715. }
  9716. setTimeout(() => {
  9717. if ((i + 1) != this.isClickColor) {
  9718. this.isClickColor = (i + 1)
  9719. }
  9720. var a = document.scrollingElement;
  9721. this.toolIndexType = `gj${i}${j}${k}`
  9722. let target = document.querySelector(`#gj${i}${j}`);
  9723. if (target) {
  9724. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[i].isFold = 0;
  9725. setTimeout(() => {
  9726. target.scrollIntoView(true);
  9727. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[i].toolChoose[j].isFold3 = false
  9728. setTimeout(() => {
  9729. this.$refs.unitBox.scrollTop = this.$refs.unitBox.scrollTop - 100;
  9730. }, 0);
  9731. }, 0);
  9732. }
  9733. }, 0);
  9734. },
  9735. dragStart(val, i, j) {
  9736. console.log(this.taskCount);
  9737. this.dragType = 'drag'
  9738. this.taskCount = j
  9739. this.oldIndex = i;
  9740. this.oldData = val;
  9741. },
  9742. dragOver(i, j) {
  9743. this.typeIndex = "chapter-" + j + '-' + i
  9744. this.newIndex = i;
  9745. },
  9746. dragEnd() {
  9747. if(this.dragType != 'drag'){
  9748. this.typeIndex = "";
  9749. this.newIndex = "";
  9750. this.dragType = "";
  9751. return;
  9752. }
  9753. console.log(this.taskCount);
  9754. let newItems = [...this.unitJson[this.unitIndex].chapterInfo[0].taskJson[this.taskCount].chapterData];
  9755. // 删除老的节点
  9756. newItems.splice(this.oldIndex, 1);
  9757. // 在列表中目标位置增加新的节点
  9758. newItems.splice(this.newIndex, 0, this.oldData);
  9759. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[this.taskCount].chapterData = [...newItems];
  9760. this.typeIndex = "";
  9761. this.newIndex = "";
  9762. this.dragType = "";
  9763. this.$forceUpdate()
  9764. },
  9765. dragTaskStart(val, i, j) {
  9766. this.dragType = 'task'
  9767. this.oldIndex = i;
  9768. this.oldData = val;
  9769. this.oldUnitIndex = j;
  9770. },
  9771. dragTaskOver(i, j) {
  9772. this.typeIndex = "task-" + i
  9773. this.newIndex = i;
  9774. this.checkUnitIndex = j;
  9775. },
  9776. dragTaskEnd() {
  9777. if(this.dragType != 'task'){
  9778. this.newIndex = "";
  9779. this.dragType = "";
  9780. this.typeIndex = "";
  9781. this.checkUnitIndex = "";
  9782. return;
  9783. }
  9784. if((this.newIndex == this.oldIndex && this.oldUnitIndex == this.checkUnitIndex)){
  9785. this.newIndex = "";
  9786. this.dragType = "";
  9787. this.typeIndex = "";
  9788. this.checkUnitIndex = "";
  9789. return;
  9790. }
  9791. this.$confirm(
  9792. "切换任务顺序将删除所有工具的提交成果,是否继续此操作?",
  9793. "提示",
  9794. {
  9795. confirmButtonText: "确定",
  9796. cancelButtonText: "取消",
  9797. type: "warning",
  9798. }
  9799. )
  9800. .then(() => {
  9801. if(this.oldUnitIndex != this.checkUnitIndex){
  9802. let newItems = [...this.unitJson[this.oldUnitIndex].chapterInfo[0].taskJson];
  9803. // 删除老的节点
  9804. newItems.splice(this.oldIndex, 1);
  9805. // 在列表中目标位置增加新的节点
  9806. let newItems2 = [...this.unitJson[this.checkUnitIndex].chapterInfo[0].taskJson];
  9807. newItems2.splice(this.newIndex, 0, this.oldData);
  9808. this.unitJson[this.oldUnitIndex].chapterInfo[0].taskJson = [...newItems];
  9809. this.unitJson[this.checkUnitIndex].chapterInfo[0].taskJson = [...newItems2];
  9810. }else{
  9811. let newItems = [...this.unitJson[this.oldUnitIndex].chapterInfo[0].taskJson];
  9812. // 删除老的节点
  9813. newItems.splice(this.oldIndex, 1);
  9814. // 在列表中目标位置增加新的节点
  9815. newItems.splice(this.newIndex, 0, this.oldData);
  9816. this.unitJson[this.oldUnitIndex].chapterInfo[0].taskJson = [...newItems];
  9817. }
  9818. this.typeIndex = "";
  9819. this.newIndex = "";
  9820. this.dragType = "";
  9821. this.checkUnitIndex = "";
  9822. this.updateWork();
  9823. this.$forceUpdate()
  9824. })
  9825. .catch(() => {
  9826. this.newIndex = "";
  9827. this.dragType = "";
  9828. this.typeIndex = "";
  9829. this.checkUnitIndex = "";
  9830. return;
  9831. });
  9832. },
  9833. dragUnitStart(val, i) {
  9834. this.dragType = 'Unit'
  9835. this.oldIndex = i;
  9836. this.oldData = val;
  9837. },
  9838. dragUnitOver(i, j) {
  9839. this.typeIndex = "Unit-" + i
  9840. this.newIndex = i;
  9841. },
  9842. dragUnitEnd() {
  9843. if(this.dragType != 'Unit'){
  9844. this.newIndex = "";
  9845. this.dragType = "";
  9846. this.typeIndex = "";
  9847. return;
  9848. }
  9849. if(this.newIndex == this.oldIndex){
  9850. this.newIndex = "";
  9851. this.dragType = "";
  9852. this.typeIndex = "";
  9853. return;
  9854. }
  9855. this.$confirm(
  9856. "切换阶段顺序将删除所有工具的提交成果,是否继续此操作?",
  9857. "提示",
  9858. {
  9859. confirmButtonText: "确定",
  9860. cancelButtonText: "取消",
  9861. type: "warning",
  9862. }
  9863. )
  9864. .then(() => {
  9865. let newItems = [...this.unitJson];
  9866. // 删除老的节点
  9867. newItems.splice(this.oldIndex, 1);
  9868. // 在列表中目标位置增加新的节点
  9869. newItems.splice(this.newIndex, 0, this.oldData);
  9870. this.unitJson = [...newItems];
  9871. this.typeIndex = "";
  9872. this.newIndex = "";
  9873. this.dragType = "";
  9874. this.updateWork();
  9875. this.$forceUpdate()
  9876. })
  9877. .catch(() => {
  9878. this.newIndex = "";
  9879. this.dragType = "";
  9880. this.typeIndex = "";
  9881. return;
  9882. });
  9883. },
  9884. },
  9885. beforeDestroy() {
  9886. clearTimeout(this.timer);
  9887. this.timer = null;
  9888. clearInterval(this.timer2);
  9889. this.timer2 = null;
  9890. clearInterval(this.pasteTimer);
  9891. this.pasteTimer = null;
  9892. },
  9893. beforeRouteLeave(to, from, next) {
  9894. clearTimeout(this.timer);
  9895. this.timer = null;
  9896. clearInterval(this.timer2);
  9897. this.timer2 = null;
  9898. clearInterval(this.pasteTimer);
  9899. this.pasteTimer = null;
  9900. next();
  9901. },
  9902. created() {
  9903. this.getStudent();
  9904. this.getTeacher();
  9905. this.getClass();
  9906. this.selectGrage();
  9907. this.getTemplate();
  9908. // this.selectType();
  9909. this.selectEva();
  9910. this.loading = false;
  9911. this.timer2 = setInterval(() => {
  9912. this.selectEva();
  9913. }, 5000);
  9914. this.pasteTimer = setInterval(() => {
  9915. this.getPaste();
  9916. }, 1000);
  9917. setTimeout(() => {
  9918. this.selectCourseDetail();
  9919. }, 500);
  9920. },
  9921. };
  9922. </script>
  9923. <style scoped>
  9924. @media screen and (max-width: 1280px) {
  9925. .mbCss {
  9926. flex-direction: column !important;
  9927. }
  9928. .pjCss {
  9929. width: 100% !important;
  9930. }
  9931. .evaCss {
  9932. width: 100% !important;
  9933. margin-top: 10px;
  9934. }
  9935. }
  9936. .el-table >>> .even_row {
  9937. background-color: #f1f1f1 !important;
  9938. }
  9939. .dialog_diy>>>.el-dialog__header {
  9940. background: #3c3c3c !important;
  9941. padding: 15px 20px;
  9942. }
  9943. .dialog_diy>>>.el-dialog__title {
  9944. color: #fff;
  9945. }
  9946. .dialog_diy>>>.el-dialog__headerbtn {
  9947. top: 19px;
  9948. }
  9949. .dialog_diy>>>.el-dialog__headerbtn .el-dialog__close {
  9950. color: #fff;
  9951. }
  9952. .dialog_diy>>>.el-dialog__headerbtn .el-dialog__close:hover {
  9953. color: #fff;
  9954. }
  9955. .dialog_diy>>>.el-dialog__body,
  9956. .dialog_diy>>>.el-dialog__footer {
  9957. background: #fafafa;
  9958. }
  9959. .dialog_diy3>>>.el-dialog__body,
  9960. .dialog_diy3>>>.el-dialog__footer {
  9961. background: #eee !important;
  9962. }
  9963. .dialog_diy3>>>.el-dialog__body {
  9964. padding: 20px 20px;
  9965. }
  9966. .dialog_diyStage>>>.el-dialog__body {
  9967. padding: 10px;
  9968. }
  9969. .source_diy>>>.el-dialog {
  9970. height: 100% !important;
  9971. margin: 0 auto !important;
  9972. }
  9973. .source_diy>>>.el-dialog__body {
  9974. height: calc(100% - 185px);
  9975. overflow: auto;
  9976. background: #e6eaf0;
  9977. }
  9978. .source_diy>>>.el-dialog__footer {
  9979. background: #e6eaf0 !important;
  9980. }
  9981. .left {
  9982. border-right: 1px solid rgb(60, 94, 143);
  9983. display: flex;
  9984. flex-direction: column;
  9985. align-items: center;
  9986. min-height: 600px;
  9987. width: 385px;
  9988. height: 80%;
  9989. }
  9990. .tips {
  9991. color: rgb(128, 128, 128);
  9992. font-size: 12px;
  9993. width: 270px;
  9994. margin: 40px;
  9995. }
  9996. .pb_content {
  9997. height: 100% !important;
  9998. /* margin: 0 20px 0 20px; */
  9999. }
  10000. .pb_content_body {
  10001. width: 100% !important;
  10002. height: 100%;
  10003. }
  10004. .info_solid {
  10005. width: 270px;
  10006. height: 30px;
  10007. border-left: 1px solid #bdbdbd;
  10008. margin: 10px 0px 10px 30px;
  10009. }
  10010. .info_steps {
  10011. width: 270px;
  10012. font-size: 0.875rem;
  10013. display: flex;
  10014. align-items: center;
  10015. }
  10016. .info_steps span:nth-child(1) {
  10017. width: 30px;
  10018. height: 30px;
  10019. background: rgba(0, 0, 0, 0.38);
  10020. display: block;
  10021. color: #fff;
  10022. border-radius: 40px;
  10023. text-align: center;
  10024. line-height: 30px;
  10025. }
  10026. .steps_active {
  10027. background: #3d67bc !important;
  10028. }
  10029. .info_steps span:nth-child(2) {
  10030. margin-left: 5px;
  10031. }
  10032. .right {
  10033. height: 100%;
  10034. width: 100%;
  10035. display: flex;
  10036. overflow: hidden;
  10037. flex-direction: column;
  10038. }
  10039. .basic_box {
  10040. margin: 0 auto;
  10041. position: relative;
  10042. padding: 0 20px 0 20px;
  10043. }
  10044. .basic_box_success {
  10045. width: 100%;
  10046. min-height: 455px;
  10047. padding: 50px 0;
  10048. position: relative;
  10049. text-align: center;
  10050. border-bottom: 1px solid #bfbfbf;
  10051. box-sizing: border-box;
  10052. display: flex;
  10053. align-items: center;
  10054. flex-direction: column;
  10055. justify-content: center;
  10056. }
  10057. .info_title {
  10058. font-size: 1.5em;
  10059. margin-right: 25px;
  10060. /* margin: 20px 30px 20px 30px; */
  10061. }
  10062. .bInfo_title {
  10063. text-align: left;
  10064. margin: 10px 0;
  10065. }
  10066. .small_title {
  10067. font-size: 14px;
  10068. line-height: 40px;
  10069. }
  10070. .chapter_beizhu {
  10071. font-size: 12px;
  10072. font-weight: bold;
  10073. float: right;
  10074. color: rgb(128, 128, 128);
  10075. margin-top: 5px;
  10076. }
  10077. .chapter_uploadBox1 {
  10078. text-align: left;
  10079. background-color: rgb(242, 242, 242);
  10080. width: 100%;
  10081. height: 67px;
  10082. padding: 0px 15px;
  10083. border-radius: 8px;
  10084. overflow: hidden;
  10085. font-size: 16px;
  10086. box-sizing: border-box;
  10087. position: relative;
  10088. }
  10089. .chapter_add {
  10090. width: 100%;
  10091. height: 32px;
  10092. margin-top: 15px;
  10093. cursor: pointer;
  10094. }
  10095. .chapter_add_l {
  10096. margin-left: 5px;
  10097. width: 30px;
  10098. height: 30px;
  10099. float: left;
  10100. border: 1px solid #aaa;
  10101. color: #aaa;
  10102. border-radius: 50%;
  10103. font-size: 25px;
  10104. text-align: center;
  10105. }
  10106. .chapter_add_r {
  10107. font-size: 18px;
  10108. height: 40px;
  10109. line-height: 30px;
  10110. text-indent: 10px;
  10111. color: #aaa;
  10112. }
  10113. .chapter_add_r span {
  10114. font-size: 12px;
  10115. color: rgb(204, 204, 204);
  10116. }
  10117. .chapter_add_input {
  10118. display: none;
  10119. }
  10120. .line {
  10121. width: 85%;
  10122. margin: 0 auto;
  10123. border-top: 1px solid #e5e5e5;
  10124. margin-top: 20px;
  10125. }
  10126. .info_btnBox {
  10127. width: calc(100%);
  10128. display: flex;
  10129. justify-content: center;
  10130. height: 80px;
  10131. align-items: center;
  10132. background: #fff;
  10133. margin: 0 auto;
  10134. border-top: 2px solid rgb(228, 232, 237);
  10135. box-sizing: border-box;
  10136. }
  10137. .info_btnBox2 {
  10138. width: calc(100%);
  10139. display: flex;
  10140. justify-content: center;
  10141. height: 20px;
  10142. align-items: center;
  10143. background: #fff;
  10144. margin: 0 auto;
  10145. border-top: 2px solid rgb(228, 232, 237);
  10146. box-sizing: border-box;
  10147. overflow: hidden;
  10148. cursor: pointer;
  10149. }
  10150. .info_btnBox3 {
  10151. width: calc(100%);
  10152. display: flex;
  10153. justify-content: flex-end;
  10154. padding: 0 20px;
  10155. height: 60px;
  10156. align-items: center;
  10157. background: unset;
  10158. margin: 0 auto;
  10159. /* border-top: 1px solid rgb(228, 232, 237); */
  10160. box-sizing: border-box;
  10161. overflow: hidden;
  10162. cursor: pointer;
  10163. background: #fff;
  10164. border-radius: 10px;
  10165. }
  10166. .info_btn+.info_btn {
  10167. margin-left: 15px;
  10168. }
  10169. .info_btn,
  10170. .teacherWord {
  10171. color: #fff;
  10172. background-color: #0f7eff;
  10173. padding: 8px 24px;
  10174. font-size: 0.9375rem;
  10175. box-shadow: 0px 1px 3px 0px rgb(0 0 0 / 20%), 0px 2px 2px 0px rgb(0 0 0 / 14%),
  10176. 0px 3px 1px -2px rgb(0 0 0 / 12%);
  10177. min-width: 64px;
  10178. font-weight: 500;
  10179. border-radius: 4px;
  10180. box-sizing: border-box;
  10181. border: none;
  10182. cursor: pointer;
  10183. }
  10184. .teacherWord {
  10185. width: 105px !important;
  10186. text-align: center !important;
  10187. line-height: 36px !important;
  10188. padding: 0 !important;
  10189. font-size: 14px !important;
  10190. margin: 10px 0 !important;
  10191. }
  10192. .template_box{
  10193. display: flex;
  10194. flex-wrap: wrap;
  10195. }
  10196. .wordTeacher {
  10197. display: flex;
  10198. flex-direction: column;
  10199. width: 100px;
  10200. height: 100px;
  10201. text-align: center;
  10202. font-size: 13px;
  10203. margin: 0 20px 20px 0 ;
  10204. background: #F0F4FA;;
  10205. position: relative;
  10206. border-radius: 5px;
  10207. align-items: center;
  10208. justify-content: center;
  10209. border: 1px solid #CAD1DC;
  10210. color: #0E1E33;
  10211. /* padding: 25px 0px; */
  10212. cursor: pointer;
  10213. }
  10214. .wordTeacher::after{
  10215. content: '';
  10216. display:block;
  10217. position: absolute;
  10218. width: 15px;
  10219. height: 15px;
  10220. right:10px;
  10221. top:10px;
  10222. background-image: url(../../assets/icon/new/choose_a.png);
  10223. background-size:100% 100%;
  10224. }
  10225. .wordTeacherA::after{
  10226. background-image: url(../../assets/icon/new/choose_b.png)
  10227. }
  10228. .wordTeacher:nth-child(5n){
  10229. margin-right: 0px;
  10230. }
  10231. .wordPic {
  10232. margin: 0 auto;
  10233. width: 30px;
  10234. height: 30px;
  10235. cursor: pointer;
  10236. }
  10237. .deleteWord {
  10238. width: 22px;
  10239. height: 22px;
  10240. position: absolute;
  10241. right: 5px;
  10242. top: -15px;
  10243. cursor: pointer;
  10244. display: none;
  10245. z-index: 999;
  10246. }
  10247. .wordPic>img,
  10248. .deleteWord>img,
  10249. .addToolImg>img {
  10250. width: 100%;
  10251. height: 100%;
  10252. }
  10253. .info_btn:hover {
  10254. background-color: #4f7cd5 !important;
  10255. }
  10256. .cru_selectBox {
  10257. display: flex;
  10258. margin: 15px 0;
  10259. flex-wrap: nowrap;
  10260. white-space: nowrap;
  10261. overflow: auto;
  10262. position: relative;
  10263. height: 40px;
  10264. max-width: calc(100% - 175px);
  10265. }
  10266. .cru_selectBox::-webkit-scrollbar {
  10267. /*滚动条整体样式*/
  10268. width: 6px;
  10269. /*高宽分别对应横竖滚动条的尺寸*/
  10270. height: 6px;
  10271. }
  10272. /*定义滚动条轨道 内阴影+圆角*/
  10273. .cru_selectBox::-webkit-scrollbar-track {
  10274. border-radius: 10px;
  10275. background-color: #eee;
  10276. }
  10277. /*定义滑块 内阴影+圆角*/
  10278. .cru_selectBox::-webkit-scrollbar-thumb {
  10279. border-radius: 10px;
  10280. -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);
  10281. background-color: rgba(0, 0, 0, 0.1);
  10282. }
  10283. .cru_line {
  10284. position: absolute;
  10285. bottom: 0px;
  10286. transition: all 0.5s;
  10287. left: 0px;
  10288. width: 50px;
  10289. height: 4px;
  10290. left: 10px;
  10291. border-radius: 2px;
  10292. background: #3681FC;
  10293. }
  10294. .cru_select {
  10295. font-size: 18px;
  10296. margin-right: 20px;
  10297. margin-left: 5px;
  10298. cursor: pointer;
  10299. color: #0E1E33;
  10300. }
  10301. .cru_select:hover {
  10302. color: #3681FC !important;
  10303. }
  10304. .cru_selected {
  10305. color: #3681FC !important;
  10306. font-weight: bold;
  10307. }
  10308. .chapter_box {
  10309. margin-top: 10px;
  10310. width: 100%;
  10311. padding: 10px 20px;
  10312. background: #fff;
  10313. border-radius: 8px;
  10314. box-sizing: border-box;
  10315. }
  10316. .chapter_contentbox {
  10317. display: flex;
  10318. align-items: center;
  10319. /* margin-top: 15px; */
  10320. }
  10321. .chapter_contentbox .cc_title {
  10322. margin: 0px;
  10323. color: black;
  10324. display: block;
  10325. white-space: nowrap;
  10326. overflow: hidden;
  10327. text-overflow: ellipsis;
  10328. margin-right: 20px;
  10329. font-size: 18px;
  10330. height: 20px;
  10331. line-height: 22px;
  10332. min-width: fit-content;
  10333. display: flex;
  10334. }
  10335. .chapter_contentbox .cc_title::before {
  10336. content: '';
  10337. height: 100%;
  10338. width: 3px;
  10339. background: #3681FC;
  10340. border-radius: 3px;
  10341. opacity: 1;
  10342. display: block;
  10343. margin-right: 10px;
  10344. }
  10345. .chapter_contentbox .cc_input {
  10346. width: 100%;
  10347. display: flex;
  10348. }
  10349. .show_taskD {
  10350. min-width: fit-content;
  10351. margin-left: 10px;
  10352. display: flex;
  10353. align-items: center;
  10354. font-size: 14px;
  10355. cursor: pointer;
  10356. color: #717C8D;
  10357. }
  10358. .show_taskD>img {
  10359. width: 15px;
  10360. margin-right: 5px;
  10361. transition: .2s all;
  10362. transform: rotate(-90deg);
  10363. }
  10364. .show_taskD.show>img {
  10365. transform: rotate(0deg);
  10366. }
  10367. .show_toolD {
  10368. min-width: fit-content;
  10369. margin-left: 10px;
  10370. display: flex;
  10371. align-items: center;
  10372. font-size: 14px;
  10373. cursor: pointer;
  10374. color: #717C8D;
  10375. /* position: absolute;
  10376. right: 45px;
  10377. top: 5px; */
  10378. }
  10379. .show_toolD>img {
  10380. width: 15px;
  10381. margin-right: 5px;
  10382. transition: .2s all;
  10383. transform: rotate(-90deg);
  10384. }
  10385. .show_toolD.show>img {
  10386. transform: rotate(0deg);
  10387. }
  10388. .remove {
  10389. background-image: url("../../assets/icon/new/delete_u.png");
  10390. cursor: pointer;
  10391. opacity: 0.5;
  10392. width: 30px;
  10393. min-width: 30px;
  10394. height: 30px;
  10395. background-size: 100% 100%;
  10396. background-repeat: no-repeat;
  10397. margin-left: 10px;
  10398. }
  10399. .remove1 {
  10400. background-image: url("../../assets/remove1.png");
  10401. background-repeat: no-repeat;
  10402. background-position: 5px 10px;
  10403. width: 40px;
  10404. height: 50px;
  10405. cursor: pointer;
  10406. margin-left: 10px;
  10407. }
  10408. .binfo_input {
  10409. width: 100%;
  10410. margin: 0;
  10411. padding: 12px 14px;
  10412. display: block;
  10413. min-width: 0;
  10414. outline: none;
  10415. box-sizing: border-box;
  10416. background: none;
  10417. border: none;
  10418. border-radius: 4px;
  10419. background: #fff;
  10420. font-size: 16px;
  10421. resize: none;
  10422. font-family: 'Microsoft YaHei';
  10423. min-height: 48px;
  10424. /* border: 1px solid #3682fc00; */
  10425. border: 1.5px solid #CAD1DC;
  10426. }
  10427. .binfo_textarea {
  10428. border: 1.5px solid #CAD1DC;
  10429. font-size: 16px;
  10430. resize: none;
  10431. /* background: #f6f6f6; */
  10432. font-family: 'Microsoft YaHei';
  10433. }
  10434. .binfo_input:focus-visible {
  10435. border: 1.5px solid #3681FC !important;
  10436. }
  10437. .time {
  10438. display: flex;
  10439. margin: 35px 0 80px 0;
  10440. }
  10441. .chapter_btnbox {
  10442. width: 160px;
  10443. border-radius: 5px;
  10444. border: 2px dashed gray;
  10445. display: flex;
  10446. padding: 8px 50px;
  10447. align-items: center;
  10448. justify-content: center;
  10449. margin: 30px auto 0;
  10450. cursor: pointer;
  10451. }
  10452. .icon_add {
  10453. position: relative;
  10454. width: 24px;
  10455. padding-top: 20px;
  10456. border-radius: 100%;
  10457. border-width: 2px;
  10458. border-style: solid;
  10459. border-color: gray;
  10460. }
  10461. .icon_add i:nth-child(1) {
  10462. position: absolute;
  10463. left: 50%;
  10464. top: 50%;
  10465. height: 60%;
  10466. transform: translate(-50%, -50%);
  10467. border-width: 1px;
  10468. border-style: solid;
  10469. border-color: inherit;
  10470. }
  10471. .icon_add i:nth-child(2) {
  10472. position: absolute;
  10473. top: 50%;
  10474. left: 50%;
  10475. width: 60%;
  10476. transform: translate(-50%, -50%);
  10477. border-width: 1px;
  10478. border-style: solid;
  10479. border-color: inherit;
  10480. }
  10481. .chapter_btn_w {
  10482. font-size: 0.9375rem;
  10483. font-weight: bold;
  10484. color: gray;
  10485. margin-left: 20px;
  10486. }
  10487. .disUoloadSty>>>.el-icon-plus {
  10488. display: none !important;
  10489. /* 上传按钮隐藏 */
  10490. }
  10491. .imgLeft {
  10492. margin: 15px 0;
  10493. }
  10494. .add_info_box {
  10495. margin: 0 0 0 auto;
  10496. display: flex;
  10497. flex-wrap: wrap;
  10498. }
  10499. .add_info_box button {
  10500. margin: 0 5px 10px 0;
  10501. }
  10502. .add_info_box2 {
  10503. display: flex;
  10504. align-items: center;
  10505. flex-wrap: wrap;
  10506. }
  10507. .add_info_box2::after {
  10508. content: "提示:支持上传10M以内的PPT和Word文件、5M以内的Excel文件, PDF文件不限制大小。";
  10509. color: red;
  10510. font-size: 14px;
  10511. margin-bottom: 10px;
  10512. }
  10513. .add_chapters_box {
  10514. text-align: left;
  10515. background-color: #fff;
  10516. width: 100%;
  10517. border-radius: 4px;
  10518. font-size: 16px;
  10519. box-sizing: border-box;
  10520. position: relative;
  10521. padding: 0 15px;
  10522. height: auto;
  10523. overflow-y: auto;
  10524. overflow-x: hidden;
  10525. border: 1px solid #CAD1DC;
  10526. }
  10527. .add_chapters_box.add_c_none {
  10528. display: flex;
  10529. justify-content: center;
  10530. align-items: center;
  10531. padding: 15px;
  10532. }
  10533. .add_c_none>img {
  10534. width: 25px;
  10535. }
  10536. .add_chapters_box.add_c_none>span {
  10537. font-size: 14px;
  10538. font-weight: 400;
  10539. margin: 0 0 5px 5px;
  10540. }
  10541. .homework_box {
  10542. display: flex;
  10543. align-items: flex-start;
  10544. flex-wrap: wrap;
  10545. margin: 15px 0 0 0;
  10546. flex-direction: column;
  10547. align-content: flex-start;
  10548. }
  10549. .course_homework {
  10550. display: flex;
  10551. justify-content: center;
  10552. flex-direction: row;
  10553. align-items: center;
  10554. margin: 0 10px 0 0;
  10555. }
  10556. .course_homework>>>.el-input__inner {
  10557. width: 140px;
  10558. margin-left: 15px;
  10559. }
  10560. .chapter_upload_move {
  10561. position: relative;
  10562. background-color: #fff;
  10563. position: absolute;
  10564. width: 100%;
  10565. top: 0px;
  10566. left: 0px;
  10567. border: 1px solid #eee;
  10568. border-radius: 5px;
  10569. transition: width 2s;
  10570. -moz-transition: width 2s;
  10571. -webkit-transition: width 2s;
  10572. -o-transition: width 2s;
  10573. }
  10574. .chapter_upload_l_i {
  10575. background-image: url("../../assets/icon.png");
  10576. background-position: 3px -165px;
  10577. width: 30px;
  10578. height: 30px;
  10579. margin: 10px auto 0 auto;
  10580. }
  10581. .course_input_box {
  10582. display: flex;
  10583. margin-right: 20px;
  10584. width: 100%;
  10585. align-items: center;
  10586. position: relative;
  10587. }
  10588. .course_input_box>.binfo_input {
  10589. width: calc(100% - 0 - 200px - 20px);
  10590. margin: 0 10px;
  10591. }
  10592. .bb_courseIcon {
  10593. width: 57px;
  10594. height: 45px;
  10595. background: #F0F4FA;
  10596. border-radius: 5px 0px 0px 5px;
  10597. display: flex;
  10598. align-items: center;
  10599. justify-content: center;
  10600. border-right: 1.5px solid rgb(202, 209, 220);
  10601. box-sizing: border-box;
  10602. position: absolute;
  10603. left: 1.5px
  10604. }
  10605. .bb_courseIcon>img {
  10606. width: 25px;
  10607. height: auto
  10608. }
  10609. .big_box {
  10610. /* margin-top: 20px; */
  10611. display: flex;
  10612. justify-content: space-between;
  10613. /* border-bottom: 1px solid #E0E2ED; */
  10614. }
  10615. .left_first {
  10616. display: flex;
  10617. flex-direction: column;
  10618. flex-wrap: nowrap;
  10619. width: calc(100% - 310px);
  10620. padding: 20px;
  10621. box-sizing: border-box;
  10622. background: #fff;
  10623. border-radius: 5px;
  10624. }
  10625. .right_first {
  10626. width: 300px;
  10627. display: flex;
  10628. align-items: center;
  10629. justify-content: center;
  10630. /* border-left: 1px solid #E0E2ED; */
  10631. box-sizing: border-box;
  10632. padding: 20px;
  10633. flex-direction: column;
  10634. background: #fff;
  10635. border-radius: 5px;
  10636. }
  10637. .ai_box {
  10638. width: 204px;
  10639. display: flex;
  10640. justify-content: flex-end;
  10641. margin-bottom: 15px;
  10642. }
  10643. .ai_content {
  10644. display: flex;
  10645. align-items: center;
  10646. font-size: 14px;
  10647. padding: 7px 20px;
  10648. box-sizing: border-box;
  10649. box-shadow: 0px 0px 12px 1px rgba(0, 0, 0, 0.16);
  10650. border-radius: 12px;
  10651. font-weight: 700;
  10652. cursor: pointer;
  10653. }
  10654. .ai_content>img {
  10655. width: 40px;
  10656. margin-right: 5px;
  10657. }
  10658. .c_info_title {
  10659. padding: 15px 0 15px 0;
  10660. font-size: 16px;
  10661. font-weight: bold;
  10662. margin: 0 0 0 20px;
  10663. box-sizing: border-box;
  10664. display: flex;
  10665. align-items: center;
  10666. line-height: 20px;
  10667. }
  10668. .c_info_title::before {
  10669. content: '';
  10670. display: block;
  10671. width: 3px;
  10672. height: 20px;
  10673. background: #0061FF;
  10674. border-radius: 3px;
  10675. margin: 0 5px 0 0;
  10676. }
  10677. .right_title {
  10678. height: 30px;
  10679. padding: 15px 0 15px 20px;
  10680. border-bottom: 1px solid #f2f2f2;
  10681. font-size: 1.5em;
  10682. font-weight: bold;
  10683. color: #0f7eff;
  10684. margin: 0 auto;
  10685. }
  10686. .people {
  10687. border: 1px solid rgb(229 229 229);
  10688. /* height: 495px; */
  10689. height: 350px;
  10690. border-radius: 5px;
  10691. width: 100%;
  10692. overflow: auto;
  10693. }
  10694. .people_top {
  10695. display: flex;
  10696. width: 100%;
  10697. /* justify-content: space-between; */
  10698. /* align-items: center; */
  10699. flex-direction: column;
  10700. padding: 10px 10px 0;
  10701. box-sizing: border-box;
  10702. }
  10703. .people_nav,
  10704. .people_top_right {
  10705. /* padding: 20px 0 0 20px; */
  10706. }
  10707. .people_top_right {
  10708. height: 40px;
  10709. margin-bottom: 10px;
  10710. }
  10711. .people_search {
  10712. display: flex;
  10713. position: relative;
  10714. }
  10715. .people_search>>>.el-input__inner {
  10716. /* height: 25px; */
  10717. width: 95%;
  10718. }
  10719. .search_img {
  10720. width: 20px;
  10721. height: 20px;
  10722. position: absolute;
  10723. right: 30px;
  10724. top: 50%;
  10725. transform: translateY(-50%);
  10726. }
  10727. .search_img>img {
  10728. width: 100%;
  10729. height: 100%;
  10730. }
  10731. .people_name {
  10732. display: flex;
  10733. justify-content: flex-start;
  10734. padding: 20px 10px;
  10735. flex-direction: column;
  10736. flex-wrap: wrap;
  10737. }
  10738. .p_box {
  10739. position: relative;
  10740. }
  10741. .people_name>>>.el-checkbox {
  10742. width: 100%;
  10743. display: flex;
  10744. align-items: center;
  10745. margin-bottom: 10px;
  10746. }
  10747. .people_name>>>.el-checkbox__label {
  10748. text-overflow: ellipsis;
  10749. overflow: hidden;
  10750. width: calc(100%);
  10751. }
  10752. .people_name2>>>.el-checkbox__label {
  10753. width: calc(100% - 130px);
  10754. }
  10755. .inviteCode {
  10756. position: absolute;
  10757. right: 30px;
  10758. color: #237ade;
  10759. top: 0;
  10760. cursor: pointer;
  10761. font-size: 13px;
  10762. }
  10763. .noneInvite {
  10764. color: #a8a8a8;
  10765. }
  10766. .inviteImg {
  10767. position: absolute;
  10768. right: 5px;
  10769. top: 0;
  10770. width: 20px;
  10771. }
  10772. .right_img {
  10773. width: 150px;
  10774. height: 150px;
  10775. margin: 0 auto;
  10776. }
  10777. .right_img>img {
  10778. width: 100%;
  10779. height: 100%;
  10780. }
  10781. .number {
  10782. margin-top: 20px;
  10783. color: #4aa6ff;
  10784. text-decoration: underline;
  10785. }
  10786. .success_button {
  10787. display: flex;
  10788. text-align: center;
  10789. margin: 5% 0 auto;
  10790. flex-direction: row;
  10791. justify-content: center;
  10792. }
  10793. .look_course {
  10794. margin-right: 40px;
  10795. background: #3d67bc;
  10796. width: 200px;
  10797. height: 35px;
  10798. line-height: 35px;
  10799. color: #fff;
  10800. text-align: center;
  10801. font-size: 14px;
  10802. border-radius: 5px;
  10803. cursor: pointer;
  10804. }
  10805. .attend_others {
  10806. width: 250px;
  10807. background: #4fb13c;
  10808. height: 35px;
  10809. line-height: 35px;
  10810. color: #fff;
  10811. text-align: center;
  10812. font-size: 14px;
  10813. border-radius: 5px;
  10814. cursor: pointer;
  10815. }
  10816. .dialog_diy2>>>.el-dialog__body {
  10817. text-align: center;
  10818. }
  10819. .write_togother {
  10820. position: absolute;
  10821. right: 45px;
  10822. display: flex;
  10823. top: 5%;
  10824. }
  10825. .write_people {
  10826. font-size: 14px;
  10827. line-height: 50px;
  10828. padding-right: 10px;
  10829. }
  10830. .end_write {
  10831. background: #3d67bc;
  10832. color: #fff;
  10833. width: 100px;
  10834. height: 35px;
  10835. line-height: 35px;
  10836. text-align: center;
  10837. font-size: 14px;
  10838. border-radius: 5px;
  10839. cursor: pointer;
  10840. }
  10841. .chapter_upload+.chapter_upload {
  10842. /* margin-top: 15px; */
  10843. border-top: 1px solid #E7EBF1;
  10844. }
  10845. .chapter_upload {
  10846. height: 45px;
  10847. position: relative;
  10848. display: flex;
  10849. align-items: center;
  10850. width: 100%;
  10851. min-height: 45px;
  10852. /* box-shadow: 0px 0px 6px 1px rgba(0, 0, 0, 0.16); */
  10853. /* border-radius: 4px; */
  10854. /* overflow: hidden; */
  10855. box-sizing: border-box;
  10856. }
  10857. .chapter_upload_drag {
  10858. position: absolute;
  10859. cursor: pointer;
  10860. width: 16px;
  10861. height: 16px;
  10862. left: -9px;
  10863. background-image: url("../../assets/icon/new/icon_course_drag.png");
  10864. background-size: 100% 100%;
  10865. z-index: 10;
  10866. }
  10867. .isNavStage > .chapter_upload_drag{
  10868. background-image: url("../../assets/icon/new/icon_course_drag_active2.png");
  10869. }
  10870. .chapter_upload_t {
  10871. background-color: #fff;
  10872. position: absolute;
  10873. height: 100%;
  10874. top: 0px;
  10875. left: 0px;
  10876. box-sizing: border-box;
  10877. }
  10878. .chapter_upload_o {
  10879. width: 100%;
  10880. height: 100%;
  10881. position: relative;
  10882. z-index: 1;
  10883. }
  10884. .chapter_upload_ic {
  10885. margin: 0 15px 0px auto;
  10886. display: flex;
  10887. align-items: center;
  10888. }
  10889. .chapter_upload_ic_l {
  10890. width: 50px;
  10891. height: 50px;
  10892. float: left;
  10893. }
  10894. .chapter_upload_ic_l div {
  10895. width: 30px;
  10896. height: 35px;
  10897. background: url("../../assets/icon/icon.png");
  10898. }
  10899. .chapter_upload_ic_edit {
  10900. height: 100%;
  10901. display: flex;
  10902. align-items: center;
  10903. cursor: pointer;
  10904. margin: 0 10px 0 0;
  10905. }
  10906. .chapter_upload_ic_edit div {
  10907. width: 18px;
  10908. height: 18px;
  10909. background-image: url("../../assets/icon/new/edit_u.png");
  10910. background-size: 100% 100%;
  10911. }
  10912. .chapter_upload_ic_r {
  10913. height: 100%;
  10914. display: flex;
  10915. align-items: center;
  10916. cursor: pointer;
  10917. }
  10918. .chapter_upload_ic_r div {
  10919. width: 18px;
  10920. height: 18px;
  10921. background-image: url("../../assets/icon/new/delete_u.png");
  10922. background-size: 100% 100%;
  10923. }
  10924. .chapter_upload_n {
  10925. display: flex;
  10926. text-indent: 10px;
  10927. text-decoration: none;
  10928. text-overflow: ellipsis;
  10929. white-space: nowrap;
  10930. overflow: hidden;
  10931. width: 55%;
  10932. margin-left: 10px;
  10933. cursor: pointer;
  10934. margin-top: 2px;
  10935. align-items: center;
  10936. }
  10937. .chapter_upload_l_i2,
  10938. .chapter_upload_l_i3,
  10939. .chapter_upload_l_i8,
  10940. .chapter_upload_l_i6,
  10941. .chapter_upload_l_i12,
  10942. .chapter_upload_l_i14,
  10943. .chapter_upload_l_i13 {
  10944. width: 15px;
  10945. height: 15px;
  10946. background-size: 100% 100%;
  10947. }
  10948. .chapter_upload_l_i2 {
  10949. background-image: url("../../assets/icon/new/u_word.png");
  10950. }
  10951. .chapter_upload_l_i3 {
  10952. background-image: url("../../assets/icon/new/u_video.png");
  10953. }
  10954. .chapter_upload_l_i8 {
  10955. background-image: url("../../assets/icon/new/u_url.png");
  10956. }
  10957. .chapter_upload_l_i14 {
  10958. background-image: url("../../assets/icon/new/u_source.png");
  10959. }
  10960. .chapter_upload_l_i6 {
  10961. background-image: url("../../assets/icon/new/u_picture.png");
  10962. }
  10963. .chapter_upload_l_i12 {
  10964. background-image: url("../../assets/icon/new/u_word.png");
  10965. }
  10966. .chapter_upload_l_i13 {
  10967. background-image: url("../../assets/icon/new/u_img.png");
  10968. }
  10969. .chapter_upload_noSee {
  10970. background-image: url("../../assets/icon/new/u_noUpload.png");
  10971. width: 18px;
  10972. height: 18px;
  10973. background-size: 100% 100%;
  10974. display: block;
  10975. margin-right: 10px;
  10976. }
  10977. .chapter_upload_ud {
  10978. display: flex;
  10979. flex-direction: row;
  10980. justify-content: center;
  10981. margin: 0 10px 0 0;
  10982. }
  10983. .chapter_upload_ud>.chapter_upload_up {
  10984. margin-bottom: 0;
  10985. margin-right: 10px;
  10986. }
  10987. .chapter_upload_down,
  10988. .chapter_upload_up {
  10989. width: 20px;
  10990. height: 20px;
  10991. background: #e4eaf2;
  10992. cursor: pointer;
  10993. margin: 0 auto;
  10994. border-radius: 5px;
  10995. display: flex;
  10996. justify-content: center;
  10997. align-items: center;
  10998. }
  10999. .chapter_upload_up::after,
  11000. .chapter_upload_down::after {
  11001. content: '';
  11002. background-image: url('../../assets/icon/new/downBtn.png');
  11003. width: 13px;
  11004. height: 13px;
  11005. background-size: 100% 100%;
  11006. display: block;
  11007. }
  11008. .chapter_upload_up::after {
  11009. background-image: url('../../assets/icon/new/upBtn.png') !important;
  11010. }
  11011. .chapter_upload_up {
  11012. margin-bottom: 5px;
  11013. }
  11014. .chapter_upload_ud2 {
  11015. display: flex;
  11016. flex-direction: row;
  11017. justify-content: center;
  11018. margin: 0 10px 0 0;
  11019. }
  11020. .chapter_upload_ud2>.chapter_upload_up2 {
  11021. margin-bottom: 0;
  11022. margin-right: 10px;
  11023. }
  11024. .chapter_upload_down2,
  11025. .chapter_upload_up2 {
  11026. cursor: pointer;
  11027. margin: 0 auto;
  11028. border-radius: 5px;
  11029. display: flex;
  11030. justify-content: center;
  11031. align-items: center;
  11032. color: #717C8D;
  11033. font-size: 14px;
  11034. }
  11035. .chapter_upload_up2{
  11036. margin-right:10px;
  11037. }
  11038. .chapter_upload_up2::before,
  11039. .chapter_upload_down2::before {
  11040. content: '';
  11041. background-image: url('../../assets/icon/new/c_up.png');
  11042. width: 14px;
  11043. height: 14px;
  11044. background-size: 100% 100%;
  11045. display: block;
  11046. margin-right: 5px;
  11047. }
  11048. .chapter_upload_up2::before {
  11049. background-image: url('../../assets/icon/new/c_down.png') !important;
  11050. }
  11051. .addWordStyle {
  11052. display: flex;
  11053. flex-direction: row;
  11054. justify-content: flex-start;
  11055. overflow-x: auto;
  11056. white-space: nowrap;
  11057. flex-wrap: wrap;
  11058. }
  11059. /* table 样式 */
  11060. .cont>>>table {
  11061. border-top: 1px solid #ccc;
  11062. border-left: 1px solid #ccc;
  11063. }
  11064. .cont>>>table td,
  11065. .cont>>>table th {
  11066. border-bottom: 1px solid #ccc;
  11067. border-right: 1px solid #ccc;
  11068. /* padding: 20px 5px; */
  11069. padding: 5px 10px;
  11070. max-width: 0px;
  11071. height: 30px;
  11072. vertical-align: baseline;
  11073. }
  11074. .cont>>>table th {
  11075. border-bottom: 2px solid #ccc;
  11076. text-align: center;
  11077. }
  11078. /* blockquote 样式 */
  11079. .cont>>>blockquote {
  11080. display: block;
  11081. border-left: 8px solid #d0e5f2;
  11082. padding: 5px 10px;
  11083. margin: 10px 0;
  11084. line-height: 1.4;
  11085. font-size: 100%;
  11086. background-color: #f1f1f1;
  11087. }
  11088. /* code 样式 */
  11089. .cont>>>code {
  11090. display: inline-block;
  11091. /* *display: inline; */
  11092. zoom: 1;
  11093. background-color: #f1f1f1;
  11094. border-radius: 3px;
  11095. padding: 3px 5px;
  11096. margin: 0 3px;
  11097. }
  11098. .cont>>>pre code {
  11099. display: block;
  11100. }
  11101. /* ul ol 样式 */
  11102. .cont>>>ul,
  11103. ol {
  11104. margin: 10px 0 10px 20px;
  11105. }
  11106. .wordbox {
  11107. display: flex;
  11108. flex-wrap: wrap;
  11109. cursor: pointer;
  11110. width: 100%;
  11111. }
  11112. .checkword {
  11113. width: 22px;
  11114. height: 22px;
  11115. margin: 10px auto 0;
  11116. cursor: pointer;
  11117. }
  11118. .checkword img {
  11119. width: 100%;
  11120. }
  11121. .stepBg {
  11122. display: flex;
  11123. justify-content: space-between;
  11124. align-items: center;
  11125. background: #fff;
  11126. width: calc(100%);
  11127. margin: 0 auto;
  11128. }
  11129. .stepBorder {
  11130. height: 3px !important;
  11131. background: #CAD1DC;
  11132. width: 100px !important;
  11133. margin: 0 15px !important;
  11134. position: relative;
  11135. }
  11136. .border-active {
  11137. background: #3681FC !important
  11138. }
  11139. .border-active::before,
  11140. .border-active::after {
  11141. border-color: #3681FC !important
  11142. }
  11143. .stepBorder::before,
  11144. .stepBorder::after {
  11145. content: '';
  11146. width: 9px;
  11147. height: 9px;
  11148. background: #FFFFFF;
  11149. opacity: 1;
  11150. border: 2px solid #ACB4BF;
  11151. display: block;
  11152. box-sizing: border-box;
  11153. border-radius: 50%;
  11154. position: absolute;
  11155. top: 50%;
  11156. transform: translateY(-50%);
  11157. }
  11158. .stepBorder::after {
  11159. right: -9px;
  11160. }
  11161. .stepTop {
  11162. width: 100%;
  11163. /* border-radius: 10px; */
  11164. display: flex;
  11165. justify-content: center;
  11166. align-items: center;
  11167. flex-wrap: nowrap;
  11168. background: #fff;
  11169. /* top: 18%; */
  11170. height: 80px;
  11171. border-bottom: 2px solid rgb(228, 232, 237);
  11172. box-sizing: border-box;
  11173. }
  11174. .stepTop2 {
  11175. width: 100%;
  11176. /* border-radius: 10px; */
  11177. display: flex;
  11178. justify-content: center;
  11179. align-items: center;
  11180. flex-wrap: nowrap;
  11181. background: #fff;
  11182. /* top: 18%; */
  11183. height: 20px;
  11184. border-bottom: 2px solid rgb(228, 232, 237);
  11185. box-sizing: border-box;
  11186. overflow: hidden;
  11187. cursor: pointer;
  11188. }
  11189. .stepTop>div img {
  11190. width: 100%;
  11191. }
  11192. .stepTop>div {
  11193. height: 50px;
  11194. width: 180px;
  11195. cursor: pointer;
  11196. margin: 10px 0;
  11197. border-radius: 10px;
  11198. }
  11199. .first,
  11200. .second,
  11201. .third,
  11202. .four {
  11203. background: #3681FC;
  11204. height: 90px;
  11205. color: #fff;
  11206. display: flex;
  11207. flex-direction: row;
  11208. align-items: center;
  11209. justify-content: center;
  11210. }
  11211. .first>div:nth-child(1),
  11212. .second>div:nth-child(1),
  11213. .third>div:nth-child(1),
  11214. .four>div:nth-child(1) {
  11215. margin: 5px 10px 0 0;
  11216. width: 2rem;
  11217. }
  11218. .firstNo,
  11219. .secondNo,
  11220. .thirdNo,
  11221. .fourNo {
  11222. background: #e7e7e7;
  11223. color: #adadad;
  11224. display: flex;
  11225. flex-direction: row;
  11226. align-items: center;
  11227. justify-content: center;
  11228. }
  11229. .firstNo>div:nth-child(1),
  11230. .secondNo>div:nth-child(1),
  11231. .thirdNo>div:nth-child(1),
  11232. .fourNo>div:nth-child(1) {
  11233. margin: 5px 10px 0 0;
  11234. width: 2rem;
  11235. }
  11236. .uploadWidth>>>.el-upload {
  11237. width: 60px;
  11238. height: 60px;
  11239. position: relative;
  11240. }
  11241. .addPeople {
  11242. background: #fa6060;
  11243. width: 150px;
  11244. height: 40px;
  11245. color: #fff;
  11246. border-radius: 5px;
  11247. text-align: center;
  11248. line-height: 40px;
  11249. font-size: 14px;
  11250. cursor: pointer;
  11251. }
  11252. .kcImg {
  11253. width: 60px;
  11254. margin-left: 10px;
  11255. }
  11256. .zyImg {
  11257. width: 55px;
  11258. margin: 0 10px;
  11259. }
  11260. .deleteZy {
  11261. width: 20px;
  11262. position: absolute;
  11263. top: 5px;
  11264. right: 5px;
  11265. cursor: pointer;
  11266. }
  11267. .kcImg>img,
  11268. .zyImg>img,
  11269. .deleteZy>img {
  11270. width: 100%;
  11271. height: 100%;
  11272. }
  11273. .zyBox {
  11274. display: flex;
  11275. flex-direction: row;
  11276. align-items: center;
  11277. background: #67d37d;
  11278. color: #fff;
  11279. width: 210px;
  11280. margin: 20px 20px 0 0;
  11281. border-radius: 10px;
  11282. height: 70px;
  11283. position: relative;
  11284. }
  11285. .upCss {
  11286. display: flex;
  11287. flex-direction: row;
  11288. justify-content: flex-start;
  11289. }
  11290. .upCss>>>.el-icon-plus {
  11291. position: none !important;
  11292. width: 200px;
  11293. height: 100px;
  11294. display: flex;
  11295. flex-wrap: nowrap;
  11296. flex-direction: column;
  11297. align-items: center;
  11298. justify-content: center;
  11299. border: 1px dashed #ccc;
  11300. min-width: 78px;
  11301. min-height: 100px;
  11302. z-index: 999;
  11303. }
  11304. .upCss>>>.el-upload-list__item-name {
  11305. width: 100px;
  11306. white-space: nowrap;
  11307. overflow: hidden;
  11308. text-overflow: ellipsis;
  11309. }
  11310. .upCss>>>.el-upload-list__item .el-icon-close {
  11311. font-size: 20px;
  11312. z-index: 9999;
  11313. }
  11314. .addStageImg {
  11315. min-width: 20px;
  11316. min-height: 20px;
  11317. width: 20px;
  11318. height: 20px;
  11319. cursor: pointer;
  11320. }
  11321. .addHW {
  11322. width: 28px;
  11323. height: 28px;
  11324. cursor: pointer;
  11325. }
  11326. .addStageImg>img,
  11327. .addHW>img {
  11328. width: 100%;
  11329. height: 100%;
  11330. }
  11331. .addNewPP>>>.el-dialog__body {
  11332. padding: 5px 20px;
  11333. }
  11334. .addNewPP>>>.el-dialog {
  11335. margin-top: 5vh !important;
  11336. }
  11337. .addNewPP2>>>.el-dialog__body {
  11338. padding: 5px 0;
  11339. }
  11340. .addNewPP2>>>.el-dialog {
  11341. margin-top: 5vh !important;
  11342. }
  11343. .isHeight {
  11344. height: 680px;
  11345. }
  11346. .toolChoose {
  11347. display: flex;
  11348. /* width: 100%; */
  11349. flex-direction: row;
  11350. flex-wrap: wrap;
  11351. }
  11352. .tool,
  11353. .isToolChoose {
  11354. display: flex;
  11355. flex-direction: column;
  11356. flex-wrap: nowrap;
  11357. width: fit-content;
  11358. margin: 10px 0 10px 0;
  11359. align-items: center;
  11360. border: 2px solid #dbdbdb00;
  11361. padding: 10px 20px;
  11362. border-radius: 5px;
  11363. cursor: pointer;
  11364. /* box-shadow: 0 0 2px 0px #dedede; */
  11365. position: relative;
  11366. box-sizing: border-box;
  11367. }
  11368. .tool:hover {
  11369. border: 2px solid #a5c7ff;
  11370. }
  11371. .tool:hover>.noCTool {
  11372. display: block;
  11373. opacity: 0.5;
  11374. }
  11375. .isToolChoose {
  11376. border: 2px solid #438aff !important;
  11377. box-shadow: 0 0 2px 0px #438aff;
  11378. opacity: 1 !important;
  11379. }
  11380. .isCTool,
  11381. .noCTool {
  11382. width: 30px;
  11383. height: 30px;
  11384. position: absolute;
  11385. top: -4px;
  11386. right: -4px;
  11387. }
  11388. .noCTool {
  11389. display: none;
  11390. }
  11391. .isCTool>img,
  11392. .noCTool>img {
  11393. width: 100%;
  11394. height: 100%;
  11395. }
  11396. .tool+.tool {
  11397. margin-right: 10px;
  11398. }
  11399. .whiteBIcon {
  11400. width: 80px;
  11401. cursor: pointer;
  11402. display: flex;
  11403. flex-direction: column;
  11404. flex-wrap: nowrap;
  11405. align-items: center;
  11406. font-size: 14px;
  11407. }
  11408. .whiteBIcon>img,
  11409. .toolIcon>img,
  11410. .arrow>img {
  11411. width: 100%;
  11412. height: 100%;
  11413. }
  11414. .check img {
  11415. width: 20px;
  11416. height: 20px;
  11417. }
  11418. .whiteBIcon>img {
  11419. box-shadow: 0px 4px 8px 0px rgb(44 133 255 / 14%);
  11420. border-radius: 15px;
  11421. }
  11422. .whiteBIcon>div:nth-child(2) {
  11423. height: 20px;
  11424. line-height: 20px;
  11425. }
  11426. .check {
  11427. /* width: 20px;
  11428. height: 20px; */
  11429. cursor: pointer;
  11430. margin: 10px 0 0;
  11431. }
  11432. .checkDiv {
  11433. display: flex;
  11434. align-items: center;
  11435. }
  11436. .checkDiv span {
  11437. margin-left: 5px;
  11438. color: #858585;
  11439. }
  11440. .customWidth>>>.el-dialog {
  11441. min-width: 500px !important;
  11442. }
  11443. .a_addBox {
  11444. margin: 10px 0;
  11445. background: #fff;
  11446. padding: 15px;
  11447. /* max-height: 600px; */
  11448. overflow: auto;
  11449. }
  11450. .a_add_box {
  11451. border-bottom: 2px solid #eee;
  11452. padding-bottom: 25px;
  11453. }
  11454. .a_add_head {
  11455. display: flex;
  11456. align-items: center;
  11457. justify-content: space-between;
  11458. margin: 10px 0 0 0;
  11459. font-size: 18px;
  11460. }
  11461. .a_add_checkType {
  11462. margin-top: 10px;
  11463. display: flex;
  11464. font-size: 14px;
  11465. align-items: center;
  11466. }
  11467. .a_add_checkType span {
  11468. box-sizing: border-box;
  11469. padding: 0 0 5px 0;
  11470. cursor: pointer;
  11471. }
  11472. .a_add_checkType span+span {
  11473. margin-left: 10px;
  11474. }
  11475. .a_add_checkType .active {
  11476. border-bottom: 2px solid #409eff;
  11477. color: #409eff;
  11478. }
  11479. .a_add_head .a_add_head_input {
  11480. /* width: 540px; */
  11481. width: 100%;
  11482. }
  11483. .a_add_head .a_add_head_div {
  11484. display: flex;
  11485. align-items: center;
  11486. justify-content: space-between;
  11487. }
  11488. .a_add_body {
  11489. display: flex;
  11490. /* align-items: center; */
  11491. align-items: flex-end;
  11492. }
  11493. .a_add_input {
  11494. display: flex;
  11495. align-items: center;
  11496. flex-wrap: wrap;
  11497. }
  11498. .a_add_input_choice {
  11499. flex-direction: column;
  11500. margin-right: 10px;
  11501. }
  11502. .a_add_input_choice>>>.el-radio {
  11503. display: flex;
  11504. align-items: center;
  11505. flex-direction: row-reverse;
  11506. margin: 30px 0 0 0;
  11507. position: relative;
  11508. }
  11509. .a_add_input_choice>>>.el-checkbox {
  11510. display: flex;
  11511. align-items: center;
  11512. flex-direction: row-reverse;
  11513. margin: 30px 0 0 0;
  11514. position: relative;
  11515. }
  11516. .width100 {
  11517. width: 100%;
  11518. }
  11519. .a_add_input .a_add_persent {
  11520. width: 100%;
  11521. }
  11522. .a_add_persent_div {
  11523. width: 100%;
  11524. display: flex;
  11525. align-items: center;
  11526. }
  11527. .a_add_persent_div span {
  11528. margin: 5px 0;
  11529. }
  11530. .a_add_persent_div span:nth-child(1) {
  11531. width: 30%;
  11532. }
  11533. .a_add_persent_div span:nth-child(2) {
  11534. width: 7%;
  11535. }
  11536. .a_add_persent_div span:nth-child(3) {
  11537. width: 40%;
  11538. }
  11539. .a_add_body_div {
  11540. display: flex;
  11541. align-items: center;
  11542. justify-content: center;
  11543. /* flex-direction: column; */
  11544. position: absolute;
  11545. right: -20px;
  11546. transform: translateX(100%);
  11547. }
  11548. .a_add_body_div>>>.el-button--primary {
  11549. background: #466b99;
  11550. border: none;
  11551. }
  11552. .all_choose {
  11553. display: flex;
  11554. flex-direction: row;
  11555. align-items: flex-start;
  11556. width: 100%;
  11557. }
  11558. .all_choose+.all_choose {
  11559. /* margin-top: 10px */
  11560. }
  11561. .all_choose>span {
  11562. min-width: fit-content;
  11563. display: block;
  11564. white-space: nowrap;
  11565. overflow: hidden;
  11566. text-overflow: ellipsis;
  11567. margin-right: 20px;
  11568. font-weight: bold;
  11569. font-size: 14px;
  11570. }
  11571. .all_choose>>>.el-checkbox-group {
  11572. display: flex;
  11573. flex-direction: row;
  11574. width: 100%;
  11575. flex-wrap: wrap;
  11576. align-content: center;
  11577. justify-content: flex-start;
  11578. align-items: center;
  11579. margin-top: 3px;
  11580. }
  11581. .all_choose>.el-checkbox-group>>>.el-checkbox {
  11582. margin-bottom: 10px;
  11583. display: flex;
  11584. flex-direction: row;
  11585. align-items: center;
  11586. margin-right: 10px;
  11587. }
  11588. .all_choose>.el-checkbox-group>.el-checkbox>>>.el-checkbox__label {
  11589. min-width: 80px;
  11590. overflow: hidden;
  11591. width: 80px;
  11592. text-overflow: ellipsis;
  11593. white-space: nowrap;
  11594. }
  11595. .all_choose>.el-checkbox-group>.el-checkbox>>>.el-checkbox__label:hover {
  11596. width: auto;
  11597. }
  11598. .choose>div:nth-child(3)>span {
  11599. /* letter-spacing: 0 !important; */
  11600. }
  11601. .choose {
  11602. display: flex;
  11603. flex-direction: column;
  11604. flex-wrap: nowrap;
  11605. height: 100%;
  11606. justify-content: space-evenly;
  11607. align-items: flex-start;
  11608. }
  11609. .both {
  11610. display: flex;
  11611. flex-direction: row;
  11612. flex-wrap: wrap;
  11613. width: 100%;
  11614. align-items: center;
  11615. justify-content: flex-start;
  11616. margin: 15px 0;
  11617. }
  11618. .notice>>>.el-dialog {
  11619. width: 500px !important;
  11620. text-align: center;
  11621. }
  11622. .notice>>>.el-button {
  11623. margin-top: 20px;
  11624. }
  11625. .whiteBg {
  11626. /* background: #fff; */
  11627. border-radius: 10px;
  11628. }
  11629. .wb_j_box {
  11630. display: flex;
  11631. width: 100%;
  11632. padding: 0 20px 0;
  11633. box-sizing: border-box;
  11634. }
  11635. .wb_j_box_content {
  11636. width: calc(100% - 55% - 100px);
  11637. display: flex;
  11638. align-items: center;
  11639. }
  11640. .wb_j_box_p_box {
  11641. max-width: calc(100% - 200px);
  11642. word-break: break-all;
  11643. overflow: hidden;
  11644. margin: 0 0 0 10px;
  11645. font-size: 14px;
  11646. color: #6e6e6e;
  11647. z-index: 999;
  11648. }
  11649. .chooseWho {
  11650. display: flex;
  11651. width: 410px;
  11652. flex-direction: row;
  11653. flex-wrap: nowrap;
  11654. justify-content: space-between;
  11655. padding-bottom: 10px;
  11656. }
  11657. .chooseWho>div {
  11658. cursor: pointer;
  11659. padding-bottom: 10px;
  11660. font-weight: bold;
  11661. }
  11662. .isChooseActive {
  11663. color: #3e88f4;
  11664. border-bottom: 2px solid #2f80f3;
  11665. }
  11666. .toolSort {
  11667. display: flex;
  11668. flex-direction: row;
  11669. flex-wrap: wrap;
  11670. justify-content: flex-start;
  11671. align-items: flex-start;
  11672. }
  11673. .toolSort>div {
  11674. margin-right: 10px;
  11675. }
  11676. .tools {
  11677. width: 100%;
  11678. display: flex;
  11679. flex-direction: column;
  11680. flex-wrap: nowrap;
  11681. align-items: flex-start;
  11682. }
  11683. .leftTools,
  11684. .rightTools {
  11685. width: 50%;
  11686. }
  11687. .leftTools+.leftTools {
  11688. border-top: 1px solid #dbdbdb;
  11689. padding-top: 30px;
  11690. }
  11691. .rightTools {
  11692. display: flex;
  11693. flex-direction: row;
  11694. flex-wrap: nowrap;
  11695. justify-content: space-around;
  11696. }
  11697. .firstToolList {
  11698. display: flex;
  11699. flex-direction: column;
  11700. flex-wrap: nowrap;
  11701. align-items: center;
  11702. }
  11703. .iconList {
  11704. display: flex;
  11705. flex-direction: row;
  11706. flex-wrap: wrap;
  11707. justify-content: flex-start;
  11708. align-items: center;
  11709. margin: 20px 0 5px 0;
  11710. width: 240px;
  11711. min-width: 240px;
  11712. }
  11713. .iconTool {
  11714. display: flex;
  11715. flex-direction: column;
  11716. flex-wrap: nowrap;
  11717. align-items: center;
  11718. justify-content: flex-start;
  11719. margin: 15px 10px;
  11720. }
  11721. .toolIcon {
  11722. width: 50px;
  11723. }
  11724. .taskBorder {
  11725. /* border: 1px solid #CAD1DC; */
  11726. border-radius: 10px;
  11727. margin-top: 10px;
  11728. min-height: 670px;
  11729. position: relative;
  11730. background: #fff;
  11731. padding: 20px;
  11732. overflow: hidden;
  11733. box-sizing: border-box;
  11734. }
  11735. .smallTaskBorder {
  11736. height: 405px;
  11737. min-height: 405px !important;
  11738. overflow: hidden;
  11739. }
  11740. /* .taskBorder>div {
  11741. padding: 30px 30px 10px;
  11742. } */
  11743. .addTaskBorder {
  11744. /* border: 2px solid #5E9AFC; */
  11745. border-radius: 8px;
  11746. margin-top: 10px;
  11747. cursor: pointer;
  11748. /* height: 50px;
  11749. line-height: 50px; */
  11750. background: #fff;
  11751. padding: 15px 0;
  11752. display: flex;
  11753. align-items: center;
  11754. justify-content: center;
  11755. }
  11756. /* .addTaskBorder>div {
  11757. margin: 0 auto;
  11758. display: flex;
  11759. align-items: center;
  11760. justify-content: center;
  11761. }
  11762. .addTaskBorder>div>img {
  11763. width: 20px;
  11764. }
  11765. .addTaskBorder>div>span {
  11766. font-size: 16px;
  11767. margin-left: 10px;
  11768. color: #5E9AFC;
  11769. } */
  11770. .funBlock {
  11771. display: flex;
  11772. padding: 15px 0;
  11773. flex-direction: row;
  11774. justify-content: center;
  11775. align-items: center;
  11776. position: absolute;
  11777. right: 0;
  11778. bottom: 0;
  11779. background: #fff;
  11780. width: 100%;
  11781. height: 60px;
  11782. z-index: 9;
  11783. }
  11784. .fold {
  11785. display: flex;
  11786. margin: 0 20px;
  11787. flex-direction: row;
  11788. align-items: center;
  11789. cursor: pointer;
  11790. color: #2b7bff;
  11791. }
  11792. .arrow {
  11793. margin-right: 8px;
  11794. width: 16px;
  11795. height: 16px;
  11796. min-width: 16px;
  11797. min-height: 16px;
  11798. background-size: 100% 100%;
  11799. display: block;
  11800. background-image: url(../../assets/icon/new/u_up.png);
  11801. /* border-left: 7px solid transparent;
  11802. border-bottom: 7px solid #717C8D;
  11803. border-top: 0px solid transparent;
  11804. border-right: 7px solid transparent; */
  11805. /* box-sizing: border-box; */
  11806. transition: all .3s;
  11807. }
  11808. .arrowZ {
  11809. transform: rotate(180deg);
  11810. }
  11811. .addToolFun {
  11812. display: flex;
  11813. width: 150px;
  11814. flex-direction: row;
  11815. align-items: center;
  11816. justify-content: center;
  11817. border: 2px dashed #CAD1DC;
  11818. border-radius: 5px;
  11819. height: 50px;
  11820. margin: 35px auto 0;
  11821. cursor: pointer;
  11822. }
  11823. .addToolFun2 {
  11824. display: flex;
  11825. width: 150px;
  11826. border: 2px dashed #CAD1DC;
  11827. flex-direction: row;
  11828. align-items: center;
  11829. justify-content: center;
  11830. border-radius: 5px;
  11831. height: 50px;
  11832. margin: 0 auto 0;
  11833. cursor: pointer;
  11834. }
  11835. .addToolFun2>div,
  11836. .addToolFun>div {
  11837. display: flex;
  11838. line-height: 50px;
  11839. }
  11840. .addToolImg {
  11841. width: 20px;
  11842. height: 20px;
  11843. margin-right: 10px;
  11844. }
  11845. .addToolsDia>>>.el-dialog__body {
  11846. padding: 20px;
  11847. }
  11848. .addToolsDia>>>.el-dialog__body>.toolChoose {
  11849. padding: 0;
  11850. }
  11851. .addToolsDia>>>.el-dialog__body>.toolChoose>.leftTools {
  11852. padding: 0;
  11853. border-bottom: none;
  11854. margin-bottom: 0;
  11855. }
  11856. .addToolsDia>>>.el-dialog__body>.toolChoose>.leftTools>.chooseWho {
  11857. width: 100%;
  11858. }
  11859. .lineCss>>>.el-form-item__label {
  11860. width: auto !important;
  11861. }
  11862. .lineCss>>>.el-form-item__content {
  11863. margin-left: 50px !important;
  11864. }
  11865. .newSteps {
  11866. display: flex;
  11867. width: 100% !important;
  11868. /* height: 80px; */
  11869. cursor: pointer;
  11870. margin: 10px 0;
  11871. border-radius: 10px;
  11872. flex-direction: row;
  11873. align-content: center;
  11874. justify-content: center;
  11875. align-items: center;
  11876. margin: 0 !important;
  11877. }
  11878. /* 评价样式 */
  11879. .elist_css {
  11880. padding-bottom: 75px !important;
  11881. }
  11882. .elist_title {
  11883. margin-bottom: 10px;
  11884. }
  11885. .elist_input {}
  11886. .elist_input_box {
  11887. display: flex;
  11888. align-items: center;
  11889. flex-wrap: wrap;
  11890. }
  11891. .elist_input_box+.elist_input_box {
  11892. margin-top: 30px;
  11893. }
  11894. .elist_input .elist_input_box input {
  11895. font: inherit;
  11896. color: currentColor;
  11897. width: 100%;
  11898. max-width: calc(100% - 385px);
  11899. padding: 8px 14px;
  11900. display: block;
  11901. min-width: 0;
  11902. outline: none;
  11903. border: 1px solid rgba(0, 0, 0, 0.23);
  11904. border-radius: 4px;
  11905. box-sizing: border-box;
  11906. background: #fff;
  11907. margin: 0 20px 0 0;
  11908. }
  11909. .elist_input .elist_input_box span {
  11910. height: 36px;
  11911. line-height: 36px;
  11912. color: rgb(82, 82, 82);
  11913. min-width: 80px;
  11914. }
  11915. .elist_input .elist_input_box .remove {
  11916. height: 20px;
  11917. width: 20px;
  11918. min-height: 20px;
  11919. min-width: 20px;
  11920. background-size: 100% 100%;
  11921. background-position: unset;
  11922. margin-left: 5px;
  11923. }
  11924. .elist_input_box>>>.el-rate {
  11925. display: flex;
  11926. height: 36px;
  11927. align-items: center;
  11928. }
  11929. .elist_input_box .elist_inptu_text {
  11930. width: 100%;
  11931. display: flex;
  11932. align-items: center;
  11933. margin-top: 10px;
  11934. }
  11935. .elist_input_box .elist_inptu_text input {
  11936. /* width: 500px; */
  11937. width: 100%;
  11938. max-width: unset;
  11939. }
  11940. .elist_input_box>>>.el-rate__icon {
  11941. font-size: 24px;
  11942. }
  11943. .elist_btn {
  11944. margin-top: 10px;
  11945. }
  11946. .lineTitle {
  11947. /* margin-top: 15px; */
  11948. width: 110px;
  11949. font-size: 16px;
  11950. display: flex;
  11951. align-items: center;
  11952. line-height: 20px;
  11953. }
  11954. .lineTitle::before {
  11955. content: '';
  11956. display: block;
  11957. width: 3px;
  11958. height: 20px;
  11959. background: #0061FF;
  11960. border-radius: 3px;
  11961. margin: 0 5px 0 0;
  11962. }
  11963. .clineTitle::before {
  11964. content: '';
  11965. display: block;
  11966. min-width: 10px;
  11967. width: 10px;
  11968. height: 10px;
  11969. background: #0061ff;
  11970. border-radius: 50%;
  11971. margin: 0 5px 0 0;
  11972. }
  11973. .courseTop {
  11974. display: flex;
  11975. flex-direction: row;
  11976. justify-content: space-between;
  11977. align-items: center;
  11978. width: calc(100% - 40px);
  11979. margin: 0 auto;
  11980. padding: 10px 0;
  11981. }
  11982. .stepsNav {
  11983. display: flex;
  11984. flex-direction: row;
  11985. justify-content: flex-start;
  11986. align-items: center;
  11987. }
  11988. .stepsWord {
  11989. font-size: 18px;
  11990. color: #fff;
  11991. font-weight: bold;
  11992. margin-left: auto;
  11993. background: rgb(15, 126, 255);
  11994. border-radius: 5px;
  11995. padding: 3px 25px;
  11996. box-sizing: border-box;
  11997. }
  11998. .stepBox {
  11999. width: calc(100% - 40px);
  12000. height: calc(100% - 50px);
  12001. overflow: hidden;
  12002. border-radius: 5px;
  12003. margin: 0 auto;
  12004. }
  12005. .rightBox {
  12006. width: calc(100%);
  12007. background: #F0F2F5;
  12008. /* border-radius: 10px; */
  12009. overflow: auto;
  12010. height: calc(100% - 150px);
  12011. margin: 0 auto;
  12012. position: relative;
  12013. box-sizing: border-box;
  12014. }
  12015. .e_add_top {
  12016. display: flex;
  12017. justify-content: space-between;
  12018. background: #fff;
  12019. position: absolute;
  12020. right: 20px;
  12021. height: 50px;
  12022. align-items: center;
  12023. }
  12024. .e_add_title2 {
  12025. display: flex;
  12026. align-items: center;
  12027. }
  12028. .e_add_title2 span {
  12029. width: 40px;
  12030. }
  12031. .e_add_title {
  12032. display: flex;
  12033. align-items: center;
  12034. color: #b8b8b8;
  12035. font-size: 18px;
  12036. position: relative;
  12037. height: 40px;
  12038. }
  12039. .e_add_title span {
  12040. margin-right: 10px;
  12041. }
  12042. .e_add_title .el_input {
  12043. width: 300px;
  12044. }
  12045. .e_add_title>>>.el-input__inner {
  12046. width: 400px;
  12047. }
  12048. .e_add_btn {}
  12049. .e_add_content {
  12050. display: flex;
  12051. width: 100%;
  12052. }
  12053. .e_add_list {
  12054. background: #fff;
  12055. height: 500px;
  12056. width: 210px;
  12057. position: relative;
  12058. margin: 15px 5px 0 0;
  12059. flex-shrink: 0;
  12060. display: flex;
  12061. flex-direction: column;
  12062. }
  12063. .e_add_list_title {
  12064. font-size: 20px;
  12065. width: 100%;
  12066. box-sizing: border-box;
  12067. padding: 15px 40px;
  12068. text-align: center;
  12069. border-bottom: 1px solid #eaeaea;
  12070. position: relative;
  12071. display: flex;
  12072. align-items: center;
  12073. justify-content: center;
  12074. height: 57px;
  12075. background: #f6f6f6;
  12076. }
  12077. .e_add_list_title span {
  12078. overflow: hidden;
  12079. white-space: nowrap;
  12080. text-overflow: ellipsis;
  12081. }
  12082. .e_add_list_title img {
  12083. position: absolute;
  12084. right: 15px;
  12085. width: 25px;
  12086. cursor: pointer;
  12087. top: 50%;
  12088. transform: translateY(-50%);
  12089. }
  12090. .e_add_list_body {
  12091. height: calc(100% - 187px);
  12092. overflow: auto;
  12093. }
  12094. .e_add_list_child {
  12095. width: 100%;
  12096. display: flex;
  12097. align-items: center;
  12098. justify-content: center;
  12099. position: relative;
  12100. box-sizing: border-box;
  12101. padding: 15px 40px;
  12102. text-align: center;
  12103. }
  12104. .e_add_list_child span {
  12105. overflow: hidden;
  12106. white-space: nowrap;
  12107. text-overflow: ellipsis;
  12108. cursor: pointer;
  12109. }
  12110. .e_add_list_child img {
  12111. position: absolute;
  12112. right: 10px;
  12113. width: 21px;
  12114. cursor: pointer;
  12115. top: 50%;
  12116. transform: translateY(-50%);
  12117. }
  12118. .e_add_list_child+.e_add_list_child {
  12119. border-top: 1px solid #eaeaea;
  12120. }
  12121. .e_add_list_child .active {
  12122. color: #409eff;
  12123. }
  12124. .e_add_list_btn {
  12125. position: absolute;
  12126. bottom: 0;
  12127. height: 50px;
  12128. background: rgb(120, 120, 254);
  12129. width: 100%;
  12130. color: #fff;
  12131. font-size: 16px;
  12132. text-align: center;
  12133. line-height: 50px;
  12134. cursor: pointer;
  12135. }
  12136. .e_add_list_detail {
  12137. position: absolute;
  12138. bottom: 0;
  12139. height: 130px;
  12140. background: rgb(120, 120, 254);
  12141. width: 100%;
  12142. color: #fff;
  12143. font-size: 16px;
  12144. display: flex;
  12145. align-items: center;
  12146. justify-content: center;
  12147. }
  12148. .e_add_list_detail textarea {
  12149. height: 90%;
  12150. width: 95%;
  12151. border: none;
  12152. resize: none;
  12153. outline: none;
  12154. padding: 5px;
  12155. box-sizing: border-box;
  12156. }
  12157. .e_add_list_pbox {
  12158. width: 100%;
  12159. }
  12160. .e_add_list_pbox_title {
  12161. height: 50px;
  12162. background: #fff;
  12163. display: flex;
  12164. align-items: center;
  12165. width: 100%;
  12166. box-sizing: border-box;
  12167. padding: 0 20px;
  12168. flex-direction: row;
  12169. flex-wrap: wrap;
  12170. }
  12171. .type_title {
  12172. font-size: 18px;
  12173. font-weight: 700;
  12174. }
  12175. .type_content {
  12176. font-size: 16px;
  12177. margin-left: 30px;
  12178. }
  12179. .type_content span+span {
  12180. margin-left: 20px;
  12181. }
  12182. .type_content span {
  12183. cursor: pointer;
  12184. padding-bottom: 5px;
  12185. box-sizing: border-box;
  12186. }
  12187. .type_content .active {
  12188. color: #409eff;
  12189. border-bottom: 2px solid #409eff;
  12190. }
  12191. .e_add_list_pbox_content {
  12192. height: calc(100% - 50px);
  12193. display: flex;
  12194. align-items: center;
  12195. width: 100%;
  12196. background: #fff;
  12197. }
  12198. .mbCss {
  12199. width: 100%;
  12200. display: flex;
  12201. flex-direction: row;
  12202. flex-wrap: nowrap;
  12203. align-content: center;
  12204. align-items: flex-start;
  12205. justify-content: flex-start;
  12206. }
  12207. .pjCss {
  12208. /* width: 42%; */
  12209. width: calc(100% - 55%);
  12210. display: flex;
  12211. flex-direction: column;
  12212. flex-wrap: nowrap;
  12213. align-items: flex-start;
  12214. }
  12215. .e_box {
  12216. /* display: flex; */
  12217. flex-wrap: wrap;
  12218. max-height: 500px;
  12219. align-items: flex-start;
  12220. overflow: auto;
  12221. width:100%;
  12222. }
  12223. .e_card {
  12224. border: 1px solid #ccc;
  12225. background: #fff;
  12226. margin-right: 20px;
  12227. width: 270px;
  12228. display: flex;
  12229. flex-direction: column;
  12230. align-items: center;
  12231. border-radius: 5px;
  12232. margin-top: 10px;
  12233. text-align: center;
  12234. }
  12235. .e_card_picture {
  12236. margin: 10px 0;
  12237. }
  12238. .e_card_picture>img {
  12239. width: 50px;
  12240. }
  12241. .e_card_name {
  12242. width: 100%;
  12243. padding: 0 10px;
  12244. box-sizing: border-box;
  12245. margin-bottom: 10px;
  12246. overflow: hidden;
  12247. text-overflow: ellipsis;
  12248. white-space: nowrap;
  12249. }
  12250. .e_card_time {
  12251. width: 100%;
  12252. padding: 0 10px;
  12253. box-sizing: border-box;
  12254. font-size: 15px;
  12255. color: #c3c3c3;
  12256. margin-bottom: 10px;
  12257. }
  12258. .e_card_btn {
  12259. height: 40px;
  12260. display: flex;
  12261. align-items: center;
  12262. width: 100%;
  12263. background: rgb(244, 244, 244);
  12264. }
  12265. .e_card_btn:hover {
  12266. background: rgb(221 221 221);
  12267. }
  12268. .e_card_btn span {
  12269. flex: 1 1 auto;
  12270. text-align: center;
  12271. cursor: pointer;
  12272. }
  12273. .addEva {
  12274. border: 1px solid #ccc;
  12275. background: #fff;
  12276. margin-right: 20px;
  12277. width: 270px;
  12278. height: 149px;
  12279. display: flex;
  12280. flex-direction: column;
  12281. align-items: center;
  12282. border-radius: 5px;
  12283. margin-top: 10px;
  12284. text-align: center;
  12285. cursor: pointer;
  12286. justify-content: center;
  12287. }
  12288. .addEva>img {
  12289. width: 50px;
  12290. object-fit: cover;
  12291. }
  12292. .uploadFm {
  12293. border: 1px dashed #ccc;
  12294. width: 100%;
  12295. height: 140px;
  12296. position: relative;
  12297. cursor: pointer;
  12298. display: flex;
  12299. flex-direction: column;
  12300. justify-content: center;
  12301. align-items: center;
  12302. font-size: 14px;
  12303. color: #6e6e6e;
  12304. position:relative;
  12305. }
  12306. .cover_p{
  12307. width: 100% !important;
  12308. height: 100%;
  12309. object-fit: cover;
  12310. }
  12311. .uploadFm2:hover .cover_mask{
  12312. display: flex !important;
  12313. }
  12314. .cover_mask{
  12315. display:none;
  12316. width:100%;
  12317. height:100%;
  12318. position:absolute;
  12319. background:#00000054;
  12320. align-items: center;
  12321. justify-content: center;
  12322. flex-direction: column;
  12323. }
  12324. .cover_mask > img{
  12325. width: 30px;
  12326. }
  12327. .cover_mask > span{
  12328. color: #fff;
  12329. font-size: 12px;
  12330. }
  12331. .uploadFm>img {
  12332. width: 50px;
  12333. }
  12334. .fileCss {
  12335. width: 100%;
  12336. display: flex;
  12337. flex-direction: row;
  12338. flex-wrap: nowrap;
  12339. justify-content: space-around;
  12340. align-items: center;
  12341. padding-top: 15px;
  12342. }
  12343. .fileCss>div {
  12344. display: flex;
  12345. flex-direction: column;
  12346. align-items: center;
  12347. }
  12348. .fileCss .spanName {
  12349. margin-top: 10px
  12350. }
  12351. .sysPicBox {
  12352. display: flex;
  12353. flex-direction: row;
  12354. flex-wrap: wrap;
  12355. align-content: flex-start;
  12356. height: 435px;
  12357. overflow: auto;
  12358. position: relative;
  12359. }
  12360. .picNone {
  12361. position: absolute;
  12362. left: 50%;
  12363. top: 45%;
  12364. transform: translate(-50%, -50%);
  12365. width: fit-content;
  12366. color: #9c9c9c;
  12367. }
  12368. .sysPic {
  12369. width: 200px;
  12370. height: 115px;
  12371. margin: 0 20px 20px 0;
  12372. cursor: pointer;
  12373. }
  12374. .sysPic>img,
  12375. .isSysPic>img,
  12376. .deletePic>img {
  12377. width: 100%;
  12378. height: 100%;
  12379. object-fit: cover;
  12380. }
  12381. .isSysPic {
  12382. width: 200px;
  12383. height: 115px;
  12384. position: relative;
  12385. }
  12386. .deletePic {
  12387. width: 20px;
  12388. height: 20px;
  12389. position: absolute;
  12390. top: 0;
  12391. right: 0;
  12392. cursor: pointer;
  12393. }
  12394. .select_box1 {
  12395. height: 100%;
  12396. }
  12397. .select_box1_img {
  12398. background: #fff;
  12399. border-radius: 5px;
  12400. padding: 15px;
  12401. box-sizing: border-box;
  12402. margin-bottom: 20px;
  12403. }
  12404. .select_box1_title {
  12405. padding: 0 0 15px 0;
  12406. border-bottom: 1px solid #eee;
  12407. margin-bottom: 15px;
  12408. }
  12409. .select_box1_title span:nth-child(1) {
  12410. font-size: 16px;
  12411. margin-right: 20px;
  12412. color: #000;
  12413. }
  12414. .select_box1_title span:nth-child(2) {
  12415. font-size: 14px;
  12416. color: rgb(112, 112, 112);
  12417. }
  12418. .select_box1_add_img {}
  12419. .select_box1_select {
  12420. background: #fff;
  12421. border-radius: 5px;
  12422. padding: 15px;
  12423. box-sizing: border-box;
  12424. height: calc(100% - 200px);
  12425. overflow: auto;
  12426. }
  12427. .select_box2 {
  12428. height: 100%;
  12429. }
  12430. .select_box2_title {
  12431. background: #fff;
  12432. border-radius: 5px;
  12433. padding: 5px 10px;
  12434. box-sizing: border-box;
  12435. margin-bottom: 10px;
  12436. }
  12437. .select_box2_box {
  12438. display: flex;
  12439. height: calc(100% - 30px);
  12440. }
  12441. .select_box2_img {
  12442. width: calc(100% - 310px);
  12443. height: 100%;
  12444. overflow: auto;
  12445. background: #fff;
  12446. border-radius: 5px;
  12447. }
  12448. .select_box2_img img {
  12449. width: 100%;
  12450. }
  12451. .select_box2_answer {
  12452. background: #fff;
  12453. margin-left: 10px;
  12454. border-radius: 5px;
  12455. width: 300px;
  12456. overflow: auto;
  12457. height: 100%;
  12458. display: flex;
  12459. flex-direction: column;
  12460. align-items: center;
  12461. padding-top: 10px;
  12462. box-sizing: border-box;
  12463. }
  12464. .select_box2_answer_box {
  12465. margin: 0 0 10px 0;
  12466. width: 85%;
  12467. }
  12468. .rate_textarea {
  12469. font: inherit;
  12470. color: currentColor;
  12471. width: 100%;
  12472. padding: 8px 14px;
  12473. display: block;
  12474. min-width: 0;
  12475. outline: none;
  12476. border: 1px solid rgba(0, 0, 0, 0.23);
  12477. border-radius: 4px;
  12478. box-sizing: border-box;
  12479. background: #fff;
  12480. margin: 0 20px 0 0;
  12481. resize: none;
  12482. }
  12483. .select_answer_title {
  12484. text-align: left;
  12485. width: 85%;
  12486. margin-bottom: 10px;
  12487. font-size: 18px;
  12488. color: #8e8e8e;
  12489. }
  12490. .mask {
  12491. background-color: rgb(0 0 0 / 30%);
  12492. /* position: fixed; */
  12493. position: absolute;
  12494. top: 0;
  12495. left: 0;
  12496. width: 100%;
  12497. height: 100%;
  12498. z-index: 90;
  12499. display: flex;
  12500. align-items: center;
  12501. justify-content: center;
  12502. }
  12503. .progressBox {
  12504. width: 300px;
  12505. height: 150px;
  12506. background: #fff;
  12507. border-radius: 10px;
  12508. box-shadow: 0 0 6px 1px #bfbfbf;
  12509. display: flex;
  12510. align-items: center;
  12511. justify-content: center;
  12512. flex-direction: column;
  12513. position: relative;
  12514. color: #6c6c6c;
  12515. }
  12516. .progressBox>>>.el-progress-bar__outer {
  12517. background-color: #d1dfff !important;
  12518. }
  12519. .progressBox .lbox {
  12520. height: 50px;
  12521. font-size: 19px;
  12522. display: flex;
  12523. align-items: center;
  12524. color: #747474;
  12525. }
  12526. .progressBox .lbox img {
  12527. width: 40px;
  12528. margin-right: 20px;
  12529. }
  12530. .closeCss {
  12531. position: absolute;
  12532. top: 8px;
  12533. right: 8px;
  12534. cursor: pointer;
  12535. width: 20px;
  12536. height: 20px;
  12537. }
  12538. .closeCss>img {
  12539. width: 100%;
  12540. height: 100%;
  12541. }
  12542. .updateTips::before {
  12543. content: "协同编辑课程暂不支持修改基本信息,只支持修改阶段内容。";
  12544. font-size: 14px;
  12545. margin-left: 20px;
  12546. font-weight: 400;
  12547. color: #ff3a3a;
  12548. margin-bottom: 10px;
  12549. display: block;
  12550. }
  12551. .updateMask {
  12552. width: 100%;
  12553. z-index: 3;
  12554. top: 0;
  12555. position: absolute;
  12556. /* background-color: rgba(0,0,0,.3); */
  12557. }
  12558. .t_j_box {
  12559. display: flex;
  12560. }
  12561. .t_j_box span:nth-child(1) {
  12562. width: 15%;
  12563. overflow: hidden;
  12564. margin-right: 10px;
  12565. text-overflow: ellipsis;
  12566. white-space: nowrap;
  12567. }
  12568. .t_j_box span:nth-child(2) {
  12569. width: 30%;
  12570. overflow: hidden;
  12571. text-overflow: ellipsis;
  12572. margin-right: 10px;
  12573. }
  12574. .t_j_box span:nth-child(3) {
  12575. max-width: calc(55% - 20px);
  12576. overflow: hidden;
  12577. text-overflow: ellipsis;
  12578. }
  12579. .sentenBox {
  12580. background: #fff;
  12581. height: 600px;
  12582. overflow: auto;
  12583. background-image: url("../../assets/icon/conSentences/csBg.png");
  12584. background-position: 102%;
  12585. background-repeat: no-repeat;
  12586. background-size: 60%;
  12587. }
  12588. .sentenBox>.sentenContent {
  12589. padding-bottom: 10px;
  12590. width: 97%;
  12591. margin: 0 auto;
  12592. }
  12593. .sentenBox>.sentenContent+.sentenContent {
  12594. border-top: 1px solid #cbcbcb;
  12595. }
  12596. .addSen {
  12597. background: #409efe;
  12598. width: 90px;
  12599. color: #fff;
  12600. height: 35px;
  12601. text-align: center;
  12602. line-height: 35px;
  12603. border-radius: 5px;
  12604. float: right;
  12605. margin: 10px 20px 0 0;
  12606. cursor: pointer;
  12607. }
  12608. .sentenTop {
  12609. display: flex;
  12610. flex-direction: row;
  12611. flex-wrap: nowrap;
  12612. align-items: center;
  12613. }
  12614. .sentenTop::before {
  12615. content: attr(index);
  12616. background: #3681fc;
  12617. border-radius: 50%;
  12618. color: #fff;
  12619. width: 25px;
  12620. height: 25px;
  12621. min-width: 25px;
  12622. min-height: 25px;
  12623. text-align: center;
  12624. line-height: 25px;
  12625. margin-right: 5px;
  12626. }
  12627. .sentenTop>div:nth-child(2) {
  12628. width: 300px;
  12629. margin: 0 15px;
  12630. }
  12631. .sentenTop>div:nth-child(3) {
  12632. background: #409efe;
  12633. color: #fff;
  12634. width: 65px;
  12635. height: 35px;
  12636. text-align: center;
  12637. line-height: 35px;
  12638. border-radius: 5px;
  12639. cursor: pointer;
  12640. }
  12641. .cardList {
  12642. padding: 30px 0 20px 0;
  12643. display: flex;
  12644. flex-direction: row;
  12645. flex-wrap: wrap;
  12646. align-items: center;
  12647. box-sizing: border-box;
  12648. border-bottom: 1px solid #f4f4f4;
  12649. width: 98%;
  12650. margin: 0 auto;
  12651. }
  12652. .rightCardList {
  12653. display: flex;
  12654. flex-wrap: wrap;
  12655. }
  12656. .cardBox {
  12657. display: flex;
  12658. flex-direction: row;
  12659. flex-wrap: wrap;
  12660. align-items: center;
  12661. align-content: center;
  12662. }
  12663. .isCard,
  12664. .isCard1 {
  12665. width: auto;
  12666. padding: 0 20px;
  12667. height: 65px;
  12668. text-align: center;
  12669. line-height: 65px;
  12670. font-size: 14px;
  12671. cursor: pointer;
  12672. background-image: url("../../assets/icon/conSentences/titleBorder.png");
  12673. background-size: 100% 100%;
  12674. position: relative;
  12675. z-index: 99;
  12676. }
  12677. .isCard1 {
  12678. background-image: url("../../assets/icon/conSentences/answerBorder.png");
  12679. }
  12680. .isCard:hover .deleteWord {
  12681. display: block;
  12682. }
  12683. .isCard>div:nth-child(1),
  12684. .isCard1>div:nth-child(1) {
  12685. white-space: nowrap;
  12686. overflow: hidden;
  12687. text-overflow: ellipsis;
  12688. width: 100%;
  12689. margin: 0 auto;
  12690. }
  12691. .card {
  12692. width: 140px;
  12693. height: 65px;
  12694. }
  12695. .card>img {
  12696. width: 100%;
  12697. height: 100%;
  12698. }
  12699. .rightCardBox {
  12700. width: 98%;
  12701. margin: 10px auto 0;
  12702. }
  12703. .rightCardBox>div:nth-child(1) {
  12704. margin-bottom: 10px;
  12705. }
  12706. .cardCss {
  12707. display: flex;
  12708. flex-direction: column;
  12709. flex-wrap: nowrap;
  12710. align-items: center;
  12711. border-bottom: 3px solid #b4c3d3;
  12712. padding: 0 0 5px 0;
  12713. /* margin-right: 10px; */
  12714. }
  12715. .cardCss>div:nth-child(2) {
  12716. background: #5b7b9d;
  12717. color: #fff;
  12718. width: 20px;
  12719. height: 20px;
  12720. border-radius: 50%;
  12721. text-align: center;
  12722. line-height: 20px;
  12723. }
  12724. .sentenTopBox {
  12725. display: flex;
  12726. flex-direction: row;
  12727. flex-wrap: nowrap;
  12728. align-items: center;
  12729. justify-content: space-between;
  12730. padding: 55px 0 0 20px;
  12731. box-sizing: border-box;
  12732. width: 85%;
  12733. }
  12734. .stepsBottom {
  12735. width: 100%;
  12736. box-shadow: 0 0 10px 10px #f7f7f7;
  12737. /* background: #f7f7f7; */
  12738. border-radius: 10px;
  12739. overflow: hidden;
  12740. height: 100%
  12741. }
  12742. .navTop {
  12743. background: #53749b;
  12744. color: #fff;
  12745. height: 40px;
  12746. line-height: 40px;
  12747. padding-left: 15px;
  12748. font-size: 18px;
  12749. }
  12750. .navBottom {
  12751. /* background: #6b91b7; */
  12752. height: 100%;
  12753. overflow: auto;
  12754. padding: 10px 0;
  12755. }
  12756. .navStage {
  12757. display: flex;
  12758. flex-direction: row;
  12759. flex-wrap: nowrap;
  12760. align-items: center;
  12761. padding: 10px 10px 10px 0;
  12762. cursor: pointer;
  12763. background: #ffffff;
  12764. width: 95%;
  12765. margin: 5px auto 5px;
  12766. box-sizing: border-box;
  12767. border-radius: 5px;
  12768. flex-wrap: wrap;
  12769. position: relative;
  12770. }
  12771. .navStage::before {
  12772. content: '';
  12773. display: block;
  12774. width: 16px;
  12775. height: 16px;
  12776. background-image: url(../../assets/icon/new/icon_stage.png);
  12777. background-size: 100%;
  12778. margin-left: 25px;
  12779. }
  12780. .navStage::after {
  12781. content: '';
  12782. display: block;
  12783. width: 16px;
  12784. height: 16px;
  12785. background-image: url(../../assets/icon/new/down.png);
  12786. transform: rotate(-90deg);
  12787. background-size: 100%;
  12788. margin-left: 10px;
  12789. transition: all .5s;
  12790. }
  12791. .isNavStageOpen::after {
  12792. transform: rotate(0deg);
  12793. }
  12794. .isNavStage {
  12795. background: #0061FF;
  12796. }
  12797. .isNavStage::before{
  12798. background-image: url(../../assets/icon/new/icon_stage_a.png);
  12799. }
  12800. .isNavStage::after{
  12801. background-image: url(../../assets/icon/new/downC.png);
  12802. }
  12803. .isNavStage .nt_taskName {
  12804. font-weight: bold !important;
  12805. color: #FFFFFF !important;
  12806. }
  12807. .isNavStage .nt_taskTitle {
  12808. font-weight: bold !important;
  12809. color: #fff !important;
  12810. }
  12811. .navStage .nt_taskBox {
  12812. width: calc(100% - 68px);
  12813. padding: 0 0 0 5px;
  12814. box-sizing: border-box;
  12815. box-sizing: border-box;
  12816. display: flex;
  12817. flex-direction: row;
  12818. flex-wrap: nowrap;
  12819. align-items: baseline;
  12820. }
  12821. .navStage .nt_taskTitle {
  12822. color: #060E17;
  12823. line-height: 25px;
  12824. font-size: 16px;
  12825. }
  12826. .navStage .nt_taskName {
  12827. max-width: calc(100% - 75px);
  12828. white-space: nowrap;
  12829. overflow: hidden;
  12830. text-overflow: ellipsis;
  12831. font-size: 16px;
  12832. color: #060E17;
  12833. }
  12834. .navTask {
  12835. display: flex;
  12836. flex-direction: row;
  12837. flex-wrap: nowrap;
  12838. align-items: center;
  12839. padding: 10px 10px 10px 0;
  12840. cursor: pointer;
  12841. background: #ffffff;
  12842. width: 95%;
  12843. margin: 5px auto 5px;
  12844. box-sizing: border-box;
  12845. border-radius: 5px;
  12846. flex-wrap: wrap;
  12847. position: relative;
  12848. }
  12849. .navTask::before {
  12850. content: '';
  12851. display: block;
  12852. width: 16px;
  12853. height: 16px;
  12854. background-image: url(../../assets/icon/new/icon_arrow.png);
  12855. background-size: 100%;
  12856. margin-left: 23px;
  12857. }
  12858. .noImage::before {
  12859. display: none;
  12860. background-image: unset !important;
  12861. }
  12862. .isNavOpen::before {
  12863. /* background-image: url(../../assets/icon/new/icon_arrow_a.png) !important; */
  12864. transform: rotate(90deg);
  12865. }
  12866. .isNavTask::before {
  12867. background-image: url(../../assets/icon/new/icon_arrow_a.png) !important;
  12868. transform: rotate(-90deg);
  12869. }
  12870. .isNavTask.isNavOpen::before{
  12871. transform: rotate(0deg);
  12872. }
  12873. .dragOverTop {
  12874. border-top: 2px solid #0061FF !important;
  12875. border-radius: 0 !important;
  12876. margin-top: 10px;
  12877. }
  12878. .dragOverBottom {
  12879. border-bottom: 2px solid #0061FF !important;
  12880. border-radius: 0 !important;
  12881. margin-top: 10px;
  12882. }
  12883. .dragOverTop2 {
  12884. border-top: 2px solid #0061FF !important;
  12885. border-radius: 0 !important;
  12886. }
  12887. .dragOverBottom2 {
  12888. border-bottom: 2px solid #0061FF !important;
  12889. border-radius: 0 !important;
  12890. }
  12891. .isNavTask {
  12892. /* background: #3681FC; */
  12893. background: #EEF3FB;
  12894. }
  12895. .isNavTask>.chapter_upload_drag {
  12896. background-image: url(../../assets/icon/new/icon_course_drag_active.png) !important;
  12897. }
  12898. .isNavTask .nt_taskName {
  12899. /* color: #fff !important; */
  12900. font-weight: bold !important;
  12901. color: #0061FF !important;
  12902. }
  12903. .isNavTask .nt_taskTitle {
  12904. /* color: #AECCFE !important; */
  12905. font-weight: bold !important;
  12906. color: #0061FF !important;
  12907. }
  12908. .navTask .nt_taskBox {
  12909. width: calc(100% - 40px);
  12910. padding: 0 0 0 5px;
  12911. box-sizing: border-box;
  12912. box-sizing: border-box;
  12913. display: flex;
  12914. flex-direction: row;
  12915. flex-wrap: nowrap;
  12916. align-items: baseline;
  12917. }
  12918. .navTask .nt_taskTitle {
  12919. /* color: #717C8D; */
  12920. color: #060E17;
  12921. line-height: 25px;
  12922. font-size: 16px;
  12923. /* min-width: 66px; */
  12924. }
  12925. .navTask .nt_taskName {
  12926. /* color: #fff; */
  12927. /* max-width: 130px; */
  12928. /* width: 100%; */
  12929. max-width: calc(100% - 66px);
  12930. white-space: nowrap;
  12931. overflow: hidden;
  12932. text-overflow: ellipsis;
  12933. font-size: 16px;
  12934. color: #060E17;
  12935. /* color: #0E1E33; */
  12936. }
  12937. .gjBox {
  12938. width: calc(100% - 25px);
  12939. padding: 0 0 0 0;
  12940. box-sizing: border-box;
  12941. border-left: 1px solid #CAD1DC;
  12942. margin-left: 25px;
  12943. }
  12944. .gjBox>div {
  12945. display: flex;
  12946. align-items: center;
  12947. }
  12948. .gjBox>div::before {
  12949. content: '';
  12950. height: 1px;
  12951. width: 10px;
  12952. background: #CAD1DC;
  12953. display: block;
  12954. margin-right: 5px;
  12955. }
  12956. .gjCss {
  12957. display: flex;
  12958. flex-direction: row;
  12959. flex-wrap: nowrap;
  12960. align-items: center;
  12961. padding: 15px 0;
  12962. box-sizing: border-box;
  12963. font-size: 14px;
  12964. cursor: pointer;
  12965. }
  12966. .isGjCss {
  12967. color: #0061ff;
  12968. }
  12969. .groupBox {}
  12970. .groupContent+.groupContent {
  12971. margin-top: 30px;
  12972. }
  12973. .groupTitle {
  12974. font-size: 24px;
  12975. color: rgb(80, 80, 80);
  12976. margin-bottom: 20px;
  12977. }
  12978. .groupName {
  12979. display: flex;
  12980. align-items: center;
  12981. }
  12982. .groupn {
  12983. font-size: 15px;
  12984. margin-right: 10px;
  12985. }
  12986. .groupName+.groupName {
  12987. margin-top: 15px;
  12988. }
  12989. .groupBtn {
  12990. margin-left: 10px;
  12991. }
  12992. .groupContent>>>.el-input-number.is-without-controls .el-input__inner {
  12993. text-align: left;
  12994. }
  12995. .radioBox>div {
  12996. margin: 10px 0 0 10px;
  12997. }
  12998. .radioBox>>>.el-radio__input,
  12999. .radioBox>>>.el-checkbox__inner {
  13000. margin-left: 10px;
  13001. }
  13002. .radioBox>>>.el-radio__label,
  13003. .radioBox>>>.el-checkbox__label {
  13004. display: flex;
  13005. align-items: center;
  13006. }
  13007. .inImg {
  13008. width: 50px;
  13009. }
  13010. .inImg>img {
  13011. width: 100%;
  13012. height: 100%;
  13013. object-fit: cover;
  13014. }
  13015. .upCss>>>.el-upload-list--picture .el-upload-list__item {
  13016. height: auto;
  13017. padding: 10px;
  13018. margin: 0;
  13019. }
  13020. .upCss>>>.el-upload-list {
  13021. width: 100%;
  13022. }
  13023. .upCss>>>.el-upload-list--picture .el-upload-list__item-thumbnail {
  13024. width: 100%;
  13025. height: 120px;
  13026. object-fit: contain;
  13027. background: unset;
  13028. margin-left: 0;
  13029. }
  13030. .upCss>>>.el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name {
  13031. display: none;
  13032. }
  13033. .tcMember+.tcMember::before {
  13034. content: "、";
  13035. }
  13036. .xzUpImg {
  13037. width: 25px;
  13038. height: 25px;
  13039. min-width: 25px;
  13040. min-height: 25px;
  13041. cursor: pointer;
  13042. margin: 0 10px;
  13043. }
  13044. .xzUpImg>img {
  13045. width: 100%;
  13046. height: 100%;
  13047. }
  13048. .closeCss {
  13049. position: absolute;
  13050. top: 8px;
  13051. right: 8px;
  13052. cursor: pointer;
  13053. width: 20px;
  13054. height: 20px;
  13055. }
  13056. .closeCss>img {
  13057. width: 100%;
  13058. height: 100%;
  13059. }
  13060. .moveBtn {
  13061. display: flex;
  13062. flex-direction: row;
  13063. flex-wrap: nowrap;
  13064. align-items: center;
  13065. width: 55px;
  13066. }
  13067. .timuUpImg {
  13068. display: flex;
  13069. flex-direction: row;
  13070. align-items: center;
  13071. width: 100%;
  13072. margin-right: 10px;
  13073. }
  13074. .timuUpImg>div:nth-child(1) {
  13075. margin-right: 10px;
  13076. display: flex;
  13077. align-items: center;
  13078. width: 100%;
  13079. }
  13080. .timuImgBox {
  13081. margin: 10px 0;
  13082. display: flex;
  13083. flex-direction: column;
  13084. flex-wrap: wrap;
  13085. align-items: flex-start;
  13086. }
  13087. .timuImg {
  13088. width: 100px;
  13089. margin: 5px 0;
  13090. cursor: pointer;
  13091. position: relative;
  13092. }
  13093. .timuImg:hover .deleteWord {
  13094. display: block;
  13095. }
  13096. .deleteWord {
  13097. width: 25px;
  13098. height: 25px;
  13099. position: absolute;
  13100. right: -5px;
  13101. top: -5px;
  13102. cursor: pointer;
  13103. display: none;
  13104. }
  13105. .timuImg>img,
  13106. .deleteWord>img {
  13107. width: 100%;
  13108. height: 100%;
  13109. object-fit: cover;
  13110. }
  13111. .e_add_delete {
  13112. cursor: pointer;
  13113. margin-left: 10px;
  13114. }
  13115. .pType_box {
  13116. margin-top: 30px;
  13117. align-items: flex-end;
  13118. }
  13119. .noneBox {
  13120. height: 200px;
  13121. width: 100%;
  13122. display: flex;
  13123. align-items: center;
  13124. justify-content: center;
  13125. flex-direction: column;
  13126. /* margin-top: 150px; */
  13127. }
  13128. .noneBox>img {
  13129. width: 95px;
  13130. }
  13131. .noneBox>span {
  13132. margin-top: 10px;
  13133. color: #717C8D;
  13134. }
  13135. .rb_c_box {
  13136. width: 100%;
  13137. height: 100%;
  13138. display: flex;
  13139. /* padding: 20px; */
  13140. box-sizing: border-box;
  13141. justify-content: space-between;
  13142. }
  13143. .rb_c_box_left {
  13144. height: 100%;
  13145. background: #fff;
  13146. width: 270px;
  13147. min-width: 270px;
  13148. border-radius: 8px;
  13149. margin-right: 10px;
  13150. }
  13151. .rb_c_box_right {
  13152. height: 100%;
  13153. width: calc(100%);
  13154. overflow: hidden;
  13155. }
  13156. .rb_c_box_btn {
  13157. display: flex;
  13158. justify-content: flex-start;
  13159. height: 50px;
  13160. align-items: center;
  13161. }
  13162. .rb_c_box_right>.basic_box {
  13163. /* background: #fff; */
  13164. border-radius: 0;
  13165. height: calc(100% - 0px);
  13166. overflow: auto;
  13167. padding: 0;
  13168. }
  13169. .textarea_css {
  13170. display: block;
  13171. resize: none;
  13172. padding: 10px 15px;
  13173. line-height: 1.5;
  13174. box-sizing: border-box;
  13175. width: 100%;
  13176. font-size: 14px;
  13177. color: #606266;
  13178. background-color: #FFF;
  13179. background-image: none;
  13180. border: 1px solid #DCDFE6;
  13181. border-radius: 4px;
  13182. transition: border-color .2s cubic-bezier(.645, .045, .355, 1);
  13183. outline: none;
  13184. overflow: hidden;
  13185. height: 46px;
  13186. font-family: 'Microsoft YaHei';
  13187. }
  13188. .textarea_css::-webkit-input-placeholder {
  13189. color: #C0C4CC
  13190. }
  13191. .textarea_css:focus {
  13192. border-color: #409EFF;
  13193. outline: 0;
  13194. }
  13195. .addEditor>>>.text {
  13196. height: auto;
  13197. min-height: 100px;
  13198. }
  13199. .addEditor>>>.w-e-text-container {
  13200. min-height: 100px;
  13201. }
  13202. .moveBtn2 {
  13203. flex-direction: column;
  13204. width: fit-content;
  13205. margin: 0 10px 0 10px;
  13206. }
  13207. .moveBtn2 .chapter_upload_down,
  13208. .moveBtn2 .chapter_upload_up {
  13209. width: 16px;
  13210. height: 16px;
  13211. }
  13212. .moveBtn2 .chapter_upload_up::after,
  13213. .moveBtn2 .chapter_upload_down::after {
  13214. width: 10px;
  13215. height: 10px;
  13216. }
  13217. .fullStyle>>>.el-dialog__body {
  13218. height: calc(100% - 125px) !important;
  13219. box-sizing: border-box;
  13220. }
  13221. .fullStyle>>>.el-dialog {
  13222. width: 100% !important;
  13223. max-width: 100% !important;
  13224. height: 100% !important;
  13225. margin: 0 !important;
  13226. }
  13227. .fullStyle {
  13228. width: 100% !important;
  13229. max-width: 100% !important;
  13230. height: 100% !important;
  13231. margin: 0 auto !important;
  13232. }
  13233. .wb_j_box_btn {
  13234. width: calc(100% - 30px);
  13235. display: flex;
  13236. height: 40px;
  13237. border: 1.5px solid #CAD1DC;
  13238. border-radius: 4px;
  13239. box-sizing: border-box;
  13240. align-items: center;
  13241. font-size: 14px;
  13242. cursor: pointer;
  13243. overflow: hidden;
  13244. }
  13245. .wb_j_box_btn:hover {
  13246. border: 1.5px solid #0061FF;
  13247. }
  13248. .wb_j_box_title {
  13249. background: #F0F4FA;
  13250. height: 100%;
  13251. line-height: 40px;
  13252. width: 90px;
  13253. text-align: center;
  13254. color: #060E17;
  13255. border-right: 1.5px solid #CAD1DC;
  13256. box-sizing: border-box;
  13257. }
  13258. .wb_j_box_btn_c {
  13259. width: calc(100% - 90px);
  13260. padding: 0 35px 0 10px;
  13261. box-sizing: border-box;
  13262. position: relative;
  13263. }
  13264. .wb_j_box_span {
  13265. width: 100%;
  13266. overflow: hidden;
  13267. white-space: nowrap;
  13268. text-overflow: ellipsis;
  13269. word-wrap: break-word;
  13270. color: #717C8D;
  13271. }
  13272. .wb_j_box_arrow {
  13273. content: '';
  13274. width: 14px;
  13275. height: 14px;
  13276. background: url(../../assets/icon/new/u_arrow.png);
  13277. background-size: 100% 100%;
  13278. position: absolute;
  13279. right: 12px;
  13280. top: 50%;
  13281. transform: translateY(-50%);
  13282. }
  13283. .check_classBox {
  13284. height: 400px;
  13285. display: flex;
  13286. border-top: 1.5px solid #E7EBF1;
  13287. border-bottom: 1.5px solid #E7EBF1;
  13288. }
  13289. .check_class_right {
  13290. width: 130px;
  13291. border-right: 1px solid #E7EBF1;
  13292. display: flex;
  13293. align-items: center;
  13294. flex-direction: column;
  13295. height: 100%;
  13296. overflow: auto;
  13297. padding: 15px 0;
  13298. box-sizing: border-box;
  13299. }
  13300. .check_class {
  13301. width: 85%;
  13302. border-radius: 5px;
  13303. height: 30px;
  13304. line-height: 30px;
  13305. text-align: center;
  13306. padding: 0 10px;
  13307. box-sizing: border-box;
  13308. cursor: pointer;
  13309. white-space: nowrap;
  13310. overflow: hidden;
  13311. text-overflow: ellipsis;
  13312. }
  13313. .check_class.activeX {
  13314. background: #E0EAFB;
  13315. color: #3681FC;
  13316. font-weight: 700;
  13317. }
  13318. .check_class+.check_class {
  13319. margin-top: 15px;
  13320. }
  13321. .check_class_left {
  13322. background: #FAFAFA;
  13323. width: calc(100% - 130px);
  13324. padding: 15px;
  13325. box-sizing: border-box;
  13326. }
  13327. .check_class_all_box {
  13328. display: flex;
  13329. margin-bottom: 10px;
  13330. }
  13331. .all_check {
  13332. display: flex;
  13333. align-items: center;
  13334. padding: 2px 0 0;
  13335. margin-left: 10px;
  13336. }
  13337. .all_check>>>.el-checkbox__label {
  13338. line-height: 18px;
  13339. }
  13340. .check_class_left_title {
  13341. font-size: 16px;
  13342. font-weight: 700;
  13343. }
  13344. .check_class_item {
  13345. display: flex;
  13346. flex-wrap: wrap;
  13347. height: calc(100% - 45px);
  13348. overflow: auto;
  13349. justify-content: flex-start;
  13350. align-items: flex-start;
  13351. align-content: flex-start;
  13352. }
  13353. .class_item:first-child {
  13354. /* margin: 0 15px 15px 67px; */
  13355. }
  13356. .class_item {
  13357. margin: 0 15px 15px 0;
  13358. }
  13359. .class_item:hover>>>.el-checkbox__label {
  13360. color: #409EFF;
  13361. }
  13362. .class_item>>>.el-checkbox__label {
  13363. color: #0E1E33;
  13364. }
  13365. .class_item:hover>>>.el-checkbox__inner {
  13366. border-color: #409EFF;
  13367. }
  13368. .class_item>>>.el-checkbox,
  13369. .class_item>>>.el-checkbox__input {
  13370. display: flex;
  13371. align-items: center;
  13372. }
  13373. .taskTitle{
  13374. font-size: 20px;
  13375. font-weight: bold;
  13376. margin-bottom: 35px;
  13377. }
  13378. .taskTitle:after{
  13379. content: '';
  13380. width: 100%;
  13381. display: block;
  13382. height: 1px;
  13383. background: #CAD1DC;
  13384. position: absolute;
  13385. left: 0;
  13386. margin: 15px 0 0;
  13387. }
  13388. </style>