| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183 |
- <template>
- <div class="course-detail">
- <Header></Header>
- <section class="section">
- <div class="container">
- <div class="section__header">
- <div class="container">
- <el-breadcrumb separator="/">
- <el-breadcrumb-item :to="{ path: '/index' }"
- >首页</el-breadcrumb-item
- >
- <el-breadcrumb-item>课程详情</el-breadcrumb-item>
- </el-breadcrumb>
- </div>
- </div>
- <div class="section__body">
- <div class="container">
- <div class="course-info">
- <div class="course-info__header clearfix">
- <div
- class="left-box"
- :style="{
- backgroundImage: `url(${$tools.splitImgHost(
- goodsData.coverUrl,
- true
- )})`,
- }"
- >
- <div v-show="vid" id="player"></div>
- <div v-show="vidzb" id="playerzb"></div>
- </div>
- <div class="right-box">
- <div class="right-box__header">
- <div class="title">
- <el-select
- class="select"
- v-model="courseId"
- @change="courseChange"
- >
- <el-option
- :label="item.courseName"
- :value="item.courseId"
- v-for="(item, index) in courseList"
- :key="index"
- ></el-option>
- </el-select>
- </div>
- <div class="tabs">
- <el-tabs v-model="courseTabIndex">
- <el-tab-pane
- :name="tab.name"
- v-for="(tab, index) in menuTab"
- :key="index"
- >
- <div slot="label">
- <span class="label">{{ tab.label }}</span>
- </div>
- <template v-if="tab.name == '1'">
- <div class="right-box__body">
- <div
- class="item"
- v-for="(menu, index) in menuList"
- :key="index"
- >
- <template v-if="menu.type == 1">
- <div
- class="item__title"
- @click="openModule(menu)"
- >
- <i
- :class="{
- 'el-icon-caret-right': !menu.showList,
- 'el-icon-caret-bottom': menu.showList,
- }"
- ></i>
- {{ menu.menuName }}
- </div>
- <div class="item__content">
- <div
- class="bank-chapter"
- v-if="menu.showList"
- >
- <div
- class="bank-chapter__item"
- v-for="(
- chapter, chapterIndex
- ) in menu.list"
- :key="chapterIndex"
- >
- <div
- class="bank-chapter__item__text"
- @click="openChapter(chapter)"
- >
- <i
- :class="{
- 'el-icon-caret-right':
- !chapter.showList,
- 'el-icon-caret-bottom':
- chapter.showList,
- }"
- ></i
- >{{ chapter.name }}
- </div>
- <div
- class="bank-section"
- v-if="chapter.showList"
- >
- <div
- class="bank-section__item"
- :class="{
- active: isActive(section),
- }"
- v-for="(
- section, sectionIndex
- ) in chapter.list"
- :key="sectionIndex"
- @click="getResource(section)"
- >
- <template v-if="section.type != 2">
- <template>
- <div
- class="note note--blue"
- v-if="
- section.sectionType == 1
- "
- >
- 录播
- </div>
- <div
- class="note"
- v-if="
- section.sectionType == 2
- "
- >
- 直播
- </div>
- <div
- class="note note--yellow"
- v-if="
- section.sectionType == 3
- "
- >
- 回放
- </div>
- <div
- class="
- bank-section__item__text
- "
- >
- {{ section.name }}
- </div>
- </template>
- <template
- v-if="section.durationTime > 0"
- >
- <div class="during">
- {{
- $tools.secondToDate(
- section.durationTime
- )
- }}
- </div>
- </template>
- <template>
- <div
- class="btn"
- v-if="section.rebuild > 0"
- >
- 待重修
- </div>
- <template v-else>
- <div
- class="btn btn--green"
- v-if="section.learning == 1"
- >
- 已看完
- </div>
- </template>
- </template>
- <template
- v-if="
- section.liveStartTime &&
- section.sectionType != 3
- "
- >
- <div
- class="
- live-btn live-btn--blue
- "
- v-if="
- section.liveStartTime >
- nowTime
- "
- >
- 待开播
- </div>
- <div
- class="
- live-btn live-btn--yellow
- "
- v-if="
- section.liveStartTime <=
- nowTime &&
- section.liveEndTime >
- nowTime
- "
- >
- 直播中
- </div>
- <div
- class="live-btn"
- v-if="
- section.liveStartTime <
- nowTime
- "
- >
- 已结束
- </div>
- </template>
- </template>
- <template v-if="section.type == 2">
- <template>
- <div
- class="test-btn"
- v-if="section.doType == 1"
- >
- 练习
- </div>
- <div
- class="test-btn"
- v-if="section.doType != 1"
- >
- 考试
- </div>
- </template>
- <div
- class="bank-section__item__text"
- >
- {{ section.name }}
- </div>
- <template>
- <div
- class="btn"
- v-if="section.rebuild > 0"
- >
- 待重修
- </div>
- <template v-else>
- <div
- class="btn btn--green"
- v-if="section.learning == 1"
- >
- 合格
- </div>
- <div
- class="btn btn--red"
- v-if="section.learning == 0"
- >
- 不合格
- </div>
- <div
- class="btn btn--green"
- v-if="section.rebuild > 0"
- >
- 待重测
- </div>
- </template>
- </template>
- </template>
- </div>
- </div>
- </div>
- </div>
- </div>
- </template>
- <template v-if="menu.type == 2">
- <div class="item__content">
- <div class="bank-chapter">
- <div class="bank-chapter__item">
- <div
- class="bank-chapter__item__text"
- @click="openChapter(menu)"
- >
- <i
- :class="{
- 'el-icon-caret-right':
- !menu.showList,
- 'el-icon-caret-bottom':
- menu.showList,
- }"
- ></i
- >{{ menu.menuName }}
- </div>
- <div
- class="bank-section"
- v-if="menu.showList"
- >
- <div
- class="bank-section__item"
- :class="{
- active: isActive(section),
- }"
- v-for="(
- section, sectionIndex
- ) in menu.list"
- :key="sectionIndex"
- @click="getResource(section)"
- >
- <template v-if="section.type != 2">
- <template>
- <div
- class="note note--blue"
- v-if="
- section.sectionType == 1
- "
- >
- 录播
- </div>
- <div
- class="note"
- v-if="
- section.sectionType == 2
- "
- >
- 直播
- </div>
- <div
- class="note note--yellow"
- v-if="
- section.sectionType == 3
- "
- >
- 回放
- </div>
- </template>
- <div
- class="bank-section__item__text"
- >
- {{ section.name }}
- </div>
- <template
- v-if="section.durationTime > 0"
- >
- <div class="during">
- {{
- $tools.secondToDate(
- section.durationTime
- )
- }}
- </div>
- </template>
- <template>
- <div
- class="btn"
- v-if="section.rebuild > 0"
- >
- 待重修
- </div>
- <template v-else>
- <div
- class="btn btn--green"
- v-if="section.learning == 1"
- >
- 已看完
- </div>
- </template>
- </template>
- <template
- v-if="
- section.liveStartTime &&
- section.sectionType != 3
- "
- >
- <div
- class="
- live-btn live-btn--blue
- "
- v-if="
- section.liveStartTime >
- nowTime
- "
- >
- 待开播
- </div>
- <div
- class="
- live-btn live-btn--yellow
- "
- v-if="
- section.liveStartTime <=
- nowTime &&
- section.liveEndTime >
- nowTime
- "
- >
- 直播中
- </div>
- <div
- class="live-btn"
- v-if="
- section.liveStartTime <
- nowTime
- "
- >
- 已结束
- </div>
- </template>
- </template>
- <template v-if="section.type == 2">
- <template>
- <div
- class="test-btn"
- v-if="section.doType == 1"
- >
- 练习
- </div>
- <div
- class="test-btn"
- v-if="section.doType != 1"
- >
- 考试
- </div>
- </template>
- <div
- class="bank-section__item__text"
- >
- {{ section.name }}
- </div>
- <template>
- <div
- class="btn"
- v-if="section.rebuild > 0"
- >
- 待重修
- </div>
- <template v-else>
- <div
- class="btn btn--green"
- v-if="section.learning == 1"
- >
- 合格
- </div>
- <div
- class="btn btn--red"
- v-if="section.learning == 0"
- >
- 不合格
- </div>
- <div
- class="btn btn--green"
- v-if="section.rebuild > 0"
- >
- 待重测
- </div>
- </template>
- </template>
- </template>
- </div>
- </div>
- </div>
- </div>
- </div>
- </template>
- <template v-if="menu.type == 3">
- <div class="item__content">
- <div class="bank-section">
- <div
- class="bank-section__item"
- :class="{
- active: isActive(menu),
- }"
- @click="getResource(menu)"
- >
- <template>
- <div
- class="note note--blue"
- v-if="menu.sectionType == 1"
- >
- 录播
- </div>
- <div
- class="note"
- v-if="menu.sectionType == 2"
- >
- 直播
- </div>
- <div
- class="note note--yellow"
- v-if="menu.sectionType == 3"
- >
- 回放
- </div>
- <div class="bank-section__item__text">
- {{ menu.name }}
- </div>
- </template>
- <template v-if="menu.durationTime > 0">
- <div class="during">
- {{
- $tools.secondToDate(
- menu.durationTime
- )
- }}
- </div>
- </template>
- <template>
- <div
- class="btn"
- v-if="menu.rebuild > 0"
- >
- 待重修
- </div>
- <template v-else>
- <div
- class="btn btn--green"
- v-if="menu.learning == 1"
- >
- 已看完
- </div>
- </template>
- </template>
- <template
- v-if="
- menu.liveStartTime &&
- menu.sectionType != 3
- "
- >
- <div
- class="live-btn live-btn--blue"
- v-if="menu.liveStartTime > nowTime"
- >
- 待开播
- </div>
- <div
- class="live-btn live-btn--yellow"
- v-if="
- menu.liveStartTime <= nowTime &&
- menu.liveEndTime > nowTime
- "
- >
- 直播中
- </div>
- <div
- class="live-btn"
- v-if="menu.liveStartTime < nowTime"
- >
- 已结束
- </div>
- </template>
- </div>
- </div>
- </div>
- </template>
- </div>
- </div>
- </template>
- <template v-if="tab.name == '2'">
- <div class="right-box__body">
- <div
- class="item"
- v-for="(menu, index) in reMenuList"
- :key="index"
- >
- <template v-if="menu.type == 1">
- <div
- class="item__title"
- @click="openModule(menu)"
- >
- <i
- :class="{
- 'el-icon-caret-right': !menu.showList,
- 'el-icon-caret-bottom': menu.showList,
- }"
- ></i>
- {{ menu.menuName }}
- </div>
- <div class="item__content">
- <div
- class="bank-chapter"
- v-if="menu.showList"
- >
- <div
- class="bank-chapter__item"
- v-for="(
- chapter, chapterIndex
- ) in menu.list"
- :key="chapterIndex"
- >
- <div
- class="bank-chapter__item__text"
- @click="openChapter(chapter)"
- >
- <i
- :class="{
- 'el-icon-caret-right':
- !chapter.showList,
- 'el-icon-caret-bottom':
- chapter.showList,
- }"
- ></i
- >{{ chapter.name }}
- </div>
- <div
- class="bank-section"
- v-if="chapter.showList"
- >
- <div
- class="bank-section__item"
- :class="{
- active: isActive(section),
- }"
- v-for="(
- section, sectionIndex
- ) in chapter.list"
- :key="sectionIndex"
- @click="getResource(section)"
- >
- <template v-if="section.type != 2">
- <template>
- <div
- class="note note--blue"
- v-if="
- section.sectionType == 1
- "
- >
- 录播
- </div>
- <div
- class="note"
- v-if="
- section.sectionType == 2
- "
- >
- 直播
- </div>
- <div
- class="note note--yellow"
- v-if="
- section.sectionType == 3
- "
- >
- 回放
- </div>
- <div
- class="
- bank-section__item__text
- "
- >
- {{ section.name }}
- </div>
- </template>
- <template
- v-if="section.durationTime > 0"
- >
- <div class="during">
- {{
- $tools.secondToDate(
- section.durationTime
- )
- }}
- </div>
- </template>
- <template>
- <div
- class="btn"
- v-if="section.rebuild > 0"
- >
- 待重修
- </div>
- <template v-else>
- <div
- class="btn btn--green"
- v-if="section.learning == 1"
- >
- 已看完
- </div>
- </template>
- </template>
- <template
- v-if="
- section.liveStartTime &&
- section.sectionType != 3
- "
- >
- <div
- class="
- live-btn live-btn--blue
- "
- v-if="
- section.liveStartTime >
- nowTime
- "
- >
- 待开播
- </div>
- <div
- class="
- live-btn live-btn--yellow
- "
- v-if="
- section.liveStartTime <=
- nowTime &&
- section.liveEndTime >
- nowTime
- "
- >
- 直播中
- </div>
- <div
- class="live-btn"
- v-if="
- section.liveStartTime <
- nowTime
- "
- >
- 已结束
- </div>
- </template>
- </template>
- <template v-if="section.type == 2">
- <template>
- <div
- class="test-btn"
- v-if="section.doType == 1"
- >
- 练习
- </div>
- <div
- class="test-btn"
- v-if="section.doType != 1"
- >
- 考试
- </div>
- </template>
- <div
- class="bank-section__item__text"
- >
- {{ section.name }}
- </div>
- <template>
- <div
- class="btn"
- v-if="section.rebuild > 0"
- >
- 待重修
- </div>
- <template v-else>
- <div
- class="btn btn--green"
- v-if="section.learning == 1"
- >
- 合格
- </div>
- <div
- class="btn btn--red"
- v-if="section.learning == 0"
- >
- 不合格
- </div>
- <div
- class="btn btn--green"
- v-if="section.rebuild > 0"
- >
- 待重测
- </div>
- </template>
- </template>
- </template>
- </div>
- </div>
- </div>
- </div>
- </div>
- </template>
- <template v-if="menu.type == 2">
- <div class="item__content">
- <div class="bank-chapter">
- <div class="bank-chapter__item">
- <div
- class="bank-chapter__item__text"
- @click="openChapter(menu)"
- >
- <i
- :class="{
- 'el-icon-caret-right':
- !menu.showList,
- 'el-icon-caret-bottom':
- menu.showList,
- }"
- ></i
- >{{ menu.menuName }}
- </div>
- <div
- class="bank-section"
- v-if="menu.showList"
- >
- <div
- class="bank-section__item"
- :class="{
- active: isActive(section),
- }"
- v-for="(
- section, sectionIndex
- ) in menu.list"
- :key="sectionIndex"
- @click="getResource(section)"
- >
- <template v-if="section.type != 2">
- <template>
- <div
- class="note note--blue"
- v-if="
- section.sectionType == 1
- "
- >
- 录播
- </div>
- <div
- class="note"
- v-if="
- section.sectionType == 2
- "
- >
- 直播
- </div>
- <div
- class="note note--yellow"
- v-if="
- section.sectionType == 3
- "
- >
- 回放
- </div>
- </template>
- <div
- class="bank-section__item__text"
- >
- {{ section.name }}
- </div>
- <template
- v-if="section.durationTime > 0"
- >
- <div class="during">
- {{
- $tools.secondToDate(
- section.durationTime
- )
- }}
- </div>
- </template>
- <template>
- <div
- class="btn"
- v-if="section.rebuild > 0"
- >
- 待重修
- </div>
- <template v-else>
- <div
- class="btn btn--green"
- v-if="section.learning == 1"
- >
- 已看完
- </div>
- </template>
- </template>
- <template
- v-if="
- section.liveStartTime &&
- section.sectionType != 3
- "
- >
- <div
- class="
- live-btn live-btn--blue
- "
- v-if="
- section.liveStartTime >
- nowTime
- "
- >
- 待开播
- </div>
- <div
- class="
- live-btn live-btn--yellow
- "
- v-if="
- section.liveStartTime <=
- nowTime &&
- section.liveEndTime >
- nowTime
- "
- >
- 直播中
- </div>
- <div
- class="live-btn"
- v-if="
- section.liveStartTime <
- nowTime
- "
- >
- 已结束
- </div>
- </template>
- </template>
- <template v-if="section.type == 2">
- <template>
- <div
- class="test-btn"
- v-if="section.doType == 1"
- >
- 练习
- </div>
- <div
- class="test-btn"
- v-if="section.doType != 1"
- >
- 考试
- </div>
- </template>
- <div
- class="bank-section__item__text"
- >
- {{ section.name }}
- </div>
- <template>
- <div
- class="btn"
- v-if="section.rebuild > 0"
- >
- 待重修
- </div>
- <template v-else>
- <div
- class="btn btn--green"
- v-if="section.learning == 1"
- >
- 合格
- </div>
- <div
- class="btn btn--red"
- v-if="section.learning == 0"
- >
- 不合格
- </div>
- <div
- class="btn btn--green"
- v-if="section.rebuild > 0"
- >
- 待重测
- </div>
- </template>
- </template>
- </template>
- </div>
- </div>
- </div>
- </div>
- </div>
- </template>
- <template v-if="menu.type == 3">
- <div class="item__content">
- <div class="bank-section">
- <div
- class="bank-section__item"
- :class="{
- active: isActive(menu),
- }"
- @click="getResource(menu)"
- >
- <template>
- <div
- class="note note--blue"
- v-if="menu.sectionType == 1"
- >
- 录播
- </div>
- <div
- class="note"
- v-if="menu.sectionType == 2"
- >
- 直播
- </div>
- <div
- class="note note--yellow"
- v-if="menu.sectionType == 3"
- >
- 回放
- </div>
- <div class="bank-section__item__text">
- {{ menu.name }}
- </div>
- </template>
- <template v-if="menu.durationTime > 0">
- <div class="during">
- {{
- $tools.secondToDate(
- menu.durationTime
- )
- }}
- </div>
- </template>
- <template>
- <div
- class="btn"
- v-if="menu.rebuild > 0"
- >
- 待重修
- </div>
- <template v-else>
- <div
- class="btn btn--green"
- v-if="menu.learning == 1"
- >
- 已看完
- </div>
- </template>
- </template>
- <template
- v-if="
- menu.liveStartTime &&
- menu.sectionType != 3
- "
- >
- <div
- class="live-btn live-btn--blue"
- v-if="menu.liveStartTime > nowTime"
- >
- 待开播
- </div>
- <div
- class="live-btn live-btn--yellow"
- v-if="
- menu.liveStartTime <= nowTime &&
- menu.liveEndTime > nowTime
- "
- >
- 直播中
- </div>
- <div
- class="live-btn"
- v-if="menu.liveStartTime < nowTime"
- >
- 已结束
- </div>
- </template>
- </div>
- </div>
- </div>
- </template>
- </div>
- </div>
- </template>
- </el-tab-pane>
- </el-tabs>
- </div>
- </div>
- </div>
- </div>
- <div class="course-info__body">
- <el-tabs v-model="activeName">
- <el-tab-pane
- v-for="(item, index) in tabList"
- :key="index"
- :name="item.name"
- :label="item.label"
- >
- <template v-if="item.label == '学员须知'">
- <div class="course-menu clearfix">
- <div class="left-box">
- <div class="left-box__body">
- {{ goodsData.buyNote }}
- </div>
- </div>
- <div class="right-box">
- <div class="title">
- 推荐题库
- <span class="more">更多></span>
- </div>
- <ul class="list">
- <li
- class="course-item"
- v-for="(item, index) in 4"
- :key="index"
- @click="courseDetail()"
- >
- <div class="course-item__img">
- <div class="note">2022</div>
- </div>
- <div class="course-item__title">
- 2022年二建建设工程法规及相关知识(黄金基础班)
- </div>
- <div class="course-item__desc">
- <div class="price">¥100</div>
- <a class="add">加购物车</a>
- </div>
- </li>
- </ul>
- </div>
- </div>
- </template>
- <template v-if="item.label == '课程答疑'">
- <div class="answer-question">
- <div class="answer-question__header clearfix">
- <div class="textarea-wrap">
- <el-input
- class="textarea"
- v-model="textarea"
- rows="3"
- type="textarea"
- placeholder=""
- ></el-input>
- </div>
- <el-button type="primary" class="submit"
- >提出疑问</el-button
- >
- </div>
- <div class="answer-question__body">
- <div class="question-list">
- <div
- v-if="answerList.length == 0"
- style="text-align: center"
- >
- 暂无记录
- </div>
- <div
- class="question-list__item"
- v-for="(item, index) in answerList"
- :key="index"
- >
- <div class="question-list__item__avatar">
- <img
- v-if="item.assignRealname"
- :src="$tools.splitImgHost(item.assignAvatar)"
- alt=""
- />
- <img
- v-else
- :src="$tools.splitImgHost(item.avatar)"
- alt=""
- />
- </div>
- <div class="question-list__item__content">
- <div class="nickname">
- <template v-if="item.assignRealname">
- {{ item.assignRealname }}
- </template>
- <template v-else>
- {{
- item.assignUserId > 0 && !item.realname
- ? "祥粤老师"
- : item.realname
- }}
- </template>
- </div>
- <div class="desc">
- <template v-if="item.assignRealname"
- >我猜这堂课没人听了不会做美梦吧。</template
- >
- <template v-else>
- {{ item.answerText }}
- </template>
- </div>
- <div class="time">
- {{
- $tools.timestampToTime(
- item.createTime,
- false
- )
- }}
- <div
- class="del"
- @click="del(item)"
- v-if="item.userId != userInfo.userId"
- >
- 删除
- </div>
- </div>
- <div
- class="reply-list"
- v-if="item.assignRealname"
- >
- <div class="reply-list__item">
- <div class="reply-list__item__avatar">
- <img
- :src="$tools.splitImgHost(item.avatar)"
- alt=""
- />
- </div>
- <div class="reply-list__item__content">
- <div class="nickname">
- {{
- item.assignUserId > 0 &&
- !item.realname
- ? "祥粤老师"
- : item.realname
- }}
- </div>
- <div class="desc">
- {{ item.answerText }}
- </div>
- <div class="time">
- {{
- $tools.timestampToTime(
- item.createTime,
- false
- )
- }}
- <!-- <div class="del" v-if="index % 2 == 0">
- 删除
- </div>
- <div class="reply" v-else>回复</div> -->
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
- </template>
- <template v-if="item.label == '笔记讲义'">
- <div class="lecture-notes">
- <div class="lecture-notes__content clearfix">
- <div class="left-box">
- <div class="textarea clearfix">
- <el-input
- resize="none"
- rows="3"
- v-model="textareaNote"
- type="textarea"
- placeholder="觉得重要的就记下来吧~"
- ></el-input>
- <el-button
- type="primary"
- class="submit"
- @click="noteSubmit"
- >
- 提交笔记
- </el-button>
- </div>
- <div class="note-list">
- <div
- v-if="noteList.length == 0"
- style="text-align: center"
- >
- 暂无笔记
- </div>
- <div
- class="note-list__content"
- v-for="(item, index) in noteList"
- :key="index"
- >
- <div class="note-list__content__title">
- {{ $tools.timestampToTime(item.dateNote) }}
- </div>
- <div
- class="note-list__item"
- v-for="(note, index) in item.userNotes"
- :key="index"
- >
- <i
- class="el-icon-video-play"
- @click="noteClick(note)"
- ></i>
- <div class="note-list__item__content">
- <div class="title" @click="noteClick(note)">
- {{ $tools.secondToDate(note.noteSecond) }}
- </div>
- <div class="desc">
- {{ note.sectionName }}
- </div>
- <div class="time">{{ note.noteText }}</div>
- </div>
- </div>
- </div>
- </div>
- <div class="pagination">
- <el-pagination
- background
- layout="prev, pager, next"
- :total="noteTotal"
- :page-size="noteParams.pageSize"
- >
- </el-pagination>
- </div>
- </div>
- <div class="right-box" v-if="courseHandoutsData">
- <div class="lecture-list">
- <div class="lecture-list__header">
- 讲义
- <div
- class="slide-btn"
- @click="lectureShow = !lectureShow"
- >
- 收起
- </div>
- </div>
- <div
- class="lecture-list__body"
- v-if="lectureShow"
- >
- <div class="list">
- <div class="list__item">
- <div class="title">
- {{ courseHandoutsData.handoutsName }}
- </div>
- <div class="btns">
- <div
- class="btn"
- @click="
- previvew(
- $tools.splitImgHost(
- courseHandoutsData.handoutsUrl
- )
- )
- "
- >
- 预览
- </div>
- <!-- <div class="btn">打印</div> -->
- <div
- class="btn"
- @click="
- download(
- $tools.splitImgHost(
- courseHandoutsData.handoutsUrl
- ),
- courseHandoutsData.urlName
- )
- "
- >
- 下载
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="lecture-list__footer">
- <div class="lecture-scan">
- <div class="lecture-scan__header">
- {{ courseHandoutsData.urlName }}
- </div>
- <div class="lecture-scan__body">
- <iframe
- class="iframe"
- :src="
- $tools.splitImgHost(
- courseHandoutsData.handoutsUrl
- )
- "
- frameborder="0"
- ></iframe>
- <!-- <img src="@/assets/banner.png" alt="" /> -->
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
- </template>
- </el-tab-pane>
- </el-tabs>
- </div>
- </div>
- </div>
- </div>
- </div>
- </section>
- <el-dialog
- width="800px"
- class="take-photo"
- :visible.sync="takePhotoModal"
- :close-on-click-modal="false"
- :close-on-press-escape="false"
- :show-close="false"
- >
- <div class="take-photo__content">
- <!-- <div class="take-photo__close" @click="takePhotoModal = false">X</div> -->
- <div class="take-photo__header">人脸验证</div>
- <div class="take-photo__body clearfix">
- <div class="left-box">
- <div class="title">重要提示:</div>
- <div class="content">
- <p>1、请保证摄像头正对自己,避免头像偏左或者偏右。</p>
- <p>
- 2、请保证拍照环境光线充足(照片太暗或曝光会降低验证通过率)。
- </p>
- <p>
- 3、请保证整个头像在人脸识别区域内,脸部无遮挡装饰物(佩戴眼镜会降低通过率)。
- </p>
- <p>
- 4、如果下面视频中出现黑屏,摄像头可能被其他进程占用,请关闭其他调用摄像头的程序,重新刷新当前页面重新拍照识别。
- </p>
- </div>
- </div>
- <div class="right-box">
- <img v-show="!isTaking" :src="faceUrl" alt="" />
- <video v-show="isTaking" id="video" :src="stream"></video>
- </div>
- </div>
- <div class="take-photo__footer">
- <el-button
- type="primary"
- v-if="isTaking"
- class="take"
- @click="onPhoto"
- >拍照</el-button
- >
- <el-button
- type="primary"
- v-if="!isTaking"
- class="take"
- @click="reTake"
- >重拍</el-button
- >
- <el-button
- type="primary"
- v-if="!isTaking"
- class="take"
- @click="takeOk"
- >确认</el-button
- >
- </div>
- </div>
- </el-dialog>
- <ToolBar></ToolBar>
- <Footer></Footer>
- </div>
- </template>
- <script>
- import Footer from "@/components/footer/index";
- import Header from "@/components/header/index";
- import ToolBar from "@/components/toolbar/index";
- import { mapGetters } from "vuex";
- export default {
- name: "CourseDetail",
- components: {
- Footer,
- Header,
- ToolBar,
- },
- data() {
- return {
- recordObj: {},
- isTaking: true, //是否正在拍照
- photoConfig: false,
- stream: null,
- photoNum: 0,
- playSectionId: 0,
- photoIndex: 0, //当前位于拍照的区间下标 从0开始
- photoHistoryList: [], //已拍照历史的下标点
- moduleId: 0,
- chapterId: 0,
- menuTab: [],
- lectureShow: true,
- textarea: "",
- textareaNote: "",
- takePhotoModal: false,
- activeName: "1",
- courseId: "",
- courseTabIndex: "1",
- goodsId: "",
- gradeId: "",
- sectionItem: {},
- playTime: 0, //页面播放时长,不含暂停
- param: {
- pageNum: 1,
- pageSize: 100,
- total: 0,
- },
- lockTimer: null,
- courseList: [],
- businessData: {},
- courseHandoutsData: "",
- menuList: [],
- goodsData: {},
- tabList: [],
- vid: "",
- vidzb: "",
- player: "",
- playerzb: "",
- activeId: "", //当前选中ID
- vodPlayerJs: "https://player.polyv.net/script/player.js",
- playerJs:
- "https://player.polyv.net/resp/live-h5-player/latest/liveplayer.min.js",
- uidzb: "egsxlptzdq",
- menuList: [],
- reMenuList: [],
- answerList: [],
- noteList: [],
- photoList: [],
- noteTotal: 0,
- duration: 0,
- noteParams: {
- pageNum: 1,
- pageSize: 4,
- },
- ossAvatarUrl: "", //照片地址
- nowTime: 0,
- faceUrl: "",
- loading: null,
- };
- },
- computed: {
- ...mapGetters(["userInfo"]),
- },
- mounted() {
- this.courseId = +this.$route.query.courseId || "";
- this.nowTime = Number(new Date().getTime() / 1000).toFixed(0);
- this.goodsId = this.$route.params.goodsId;
- this.orderGoodsId = this.$route.query.orderGoodsId;
- this.gradeId = this.$route.query.gradeId;
- this.courseCourseList();
- },
- beforeDestroy() {
- try {
- this.$msgbox.close();
- } catch (err) {}
- },
- methods: {
- async takeOk() {
- this.loading = this.$loading({
- lock: true,
- text: "上传中",
- spinner: "el-icon-loading",
- background: "rgba(0, 0, 0, 0.1)",
- target: document.querySelector(".section__body"),
- });
- let compareFaceData = await this.faceRecognition();
- if (compareFaceData >= 80) {
- const waitYS = await this.imageInfos();
- this.postCoursePhotoRecord()
- .then((res) => {
- this.photoHistoryList.push(this.photoIndex);
- this.postStudyRecord(); //提交记录
- //恢复播放
- this.loading.close();
- this.$message({
- type: "success",
- message: "拍照成功",
- });
- this.takePhotoModal = false;
- this.isTaking = false;
- var polyvPlayerContext = this.player;
- if (polyvPlayerContext) {
- polyvPlayerContext.j2s_resumeVideo();
- }
- })
- .catch((err) => {
- this.loading.close();
- console.log(err, "err");
- this.$message({
- type: "warning",
- message: "上传接口报错,请重新拍照上传",
- });
- this.reTake();
- });
- } else {
- this.$message({
- type: "warning",
- message: "人脸匹配不通过,请重新拍照上传",
- });
- setTimeout(() => {
- this.loading.close();
- this.reTake();
- }, 2000);
- return;
- }
- },
- imageInfos() {
- var self = this;
- return new Promise(async (resolve, reject) => {
- const waitUpload = await self.uploadFile(self.faceUrl, 0);
- resolve(waitUpload);
- });
- },
- uploadFile(options, int) {
- var self = this;
- return new Promise((resolve, reject) => {
- var data = {
- imageStatus: int,
- gradeId: this.gradeId,
- };
- self.$request
- .getPolicy(data)
- .then((res) => {
- var ossToken = res.data.resultContent;
- if (ossToken.host == null || ossToken.host == undefined) {
- this.$message({
- type: "warning",
- message: "上传路径报错" + JSON.stringify(res.data),
- });
- return;
- }
- let data = this.$tools.convertBase64UrlToBlob(this.faceUrl);
- this.$upload
- .upload(data, 0)
- .then((res) => {
- this.ossAvatarUrl = res;
- resolve(res);
- })
- .catch((err) => {
- this.$message({
- type: "warning",
- message: "上传接口报错,请重新拍照上传",
- });
- this.reTake();
- });
- })
- .catch((err) => {
- this.$message({
- type: "warning",
- message: "签名错误" + JSON.stringify(err.data),
- });
- return;
- });
- });
- },
- faceRecognition() {
- return new Promise((resolve) => {
- this.$request
- .faceCertificationCompareFace({
- imageA: this.faceUrl,
- orderGoodsId: this.orderGoodsId,
- gradeId: this.gradeId,
- })
- .then((res) => {
- console.log(res, "res");
- resolve(res.data);
- })
- .catch((err) => {
- this.loading.close();
- this.$message({
- type: "warning",
- message: err.msg,
- });
- });
- });
- },
- /**
- * 点击重拍
- */
- reTake() {
- this.faceUrl = "";
- this.isTaking = true;
- this.getUserMedia({
- video: {
- width: 400,
- height: 300,
- },
- });
- },
- // 点击拍照按钮
- onPhoto() {
- // if (this.isIE) {
- // window.webcam.capture();
- // } else {
- const canvas = document.createElement("canvas");
- canvas.width = 400;
- canvas.height = 300;
- const context = canvas.getContext("2d");
- const video = document.getElementById("video");
- context.drawImage(video, 0, 0, 400, 300);
- this.faceUrl = canvas.toDataURL("image/png");
- this.isTaking = false;
- // }
- },
- getUserMedia(constraints, success, error) {
- if (window.navigator.mediaDevices.getUserMedia) {
- // 最新的标准API
- window.navigator.mediaDevices
- .getUserMedia(constraints)
- .then(success)
- .catch(error);
- } else if (window.navigator.webkitGetUserMedia) {
- // webkit核心浏览器
- window.navigator.webkitGetUserMedia(constraints, success, error);
- } else if (window.navigator.mozGetUserMedia) {
- // firfox浏览器
- window.navigator.mozGetUserMedia(constraints, success, error);
- } else if (window.navigator.getUserMedia) {
- // 旧版API
- window.navigator.getUserMedia(constraints, success, error);
- }
- },
- photographSuccess(stream) {
- // 兼容webkit核心浏览器
- this.isTaking = true;
- this.takePhotoModal = true;
- this.$nextTick(() => {
- const video = document.getElementById("video");
- // 将视频流设置为video元素的源
- console.dir(video);
- video.srcObject = stream;
- this.mediaStreamTrack =
- typeof stream.stop === "function" ? stream : stream.getTracks()[0];
- video.play();
- });
- },
- photographError(err) {
- this.$confirm(
- "课程学习需要开启摄像头进行拍照,经检测您的设备无摄像头可使用,请检测环境是否支持。",
- "提示",
- {
- showConfirmButton: false,
- closeOnClickModal: false,
- showCancelButton: false,
- closeOnPressEscape: false,
- distinguishCancelAndClose: false,
- showClose: false,
- }
- );
- },
- /**
- * 切换科目
- */
- courseChange() {
- this.noteParams = {
- pageNum: 1,
- pageSize: 4,
- };
- this.duration = 0;
- this.playSectionId = 0;
- this.vid = "";
- this.vidzb = "";
- this.nowTime = Number(new Date().getTime() / 1000).toFixed(0);
- this.courseDetail(); //课程详情
- this.getGoodsDetail(); //商品详情
- this.getAnswerList(); //答疑列表
- this.getMenuList(); //学习目录
- this.getReMenuList(); //获取重修目录
- this.getNoteList(); //获取节笔记
- },
- courseDetail() {
- let self = this;
- this.$request.courseDetail(this.courseId).then((res) => {
- if (res.data.educationName == "继续教育") {
- this.$request
- .lockLockAction({
- action: "jxjy",
- })
- .then((res) => {});
- // this.lockTimer = setInterval(() => {
- // this.$request
- // .lockLockAction({
- // action: "jxjy",
- // })
- // .then((res) => {});
- // }, 10000);
- }
- self.detail = res.data;
- });
- },
- openModule(menuItem) {
- //重修目录点击
- console.log(menuItem.list);
- menuItem.showList = !menuItem.showList;
- if (!menuItem.list.length) {
- if (menuItem.isRebuild) {
- this.getReChapterList(menuItem.id, menuItem.courseId, menuItem);
- } else {
- this.getBuyChapterList(menuItem.id, menuItem.courseId, menuItem);
- }
- }
- },
- getReChapterList(moduleId, courseId, menuItem) {
- this.$request
- .reChapterList({
- moduleId: moduleId,
- gradeId: this.gradeId,
- courseId: courseId,
- rebuild: 1,
- })
- .then((res) => {
- for (let i = 0; i < res.data.length; i++) {
- let item = res.data[i];
- item.id = item.chapterId;
- item.showList = false;
- item.list = [];
- item.parent = menuItem;
- item.isRebuild = 1;
- }
- menuItem.list = res.data;
- });
- },
- getBuyChapterList(moduleId, courseId, menuItem) {
- this.$request
- .reChapterList({
- moduleId: moduleId,
- gradeId: this.gradeId,
- courseId: courseId,
- })
- .then((res) => {
- for (let i = 0; i < res.data.length; i++) {
- let item = res.data[i];
- item.id = item.chapterId;
- item.menuType = 2;
- item.showList = false;
- item.list = [];
- item.parent = menuItem;
- }
- menuItem.list = res.data;
- });
- },
- openChapter(chapter) {
- console.log(chapter, "chapter");
- chapter.showList = !chapter.showList;
- if (!chapter.list.length) {
- if (chapter.isRebuild) {
- this.getReSectionList(
- chapter.id,
- chapter.courseId,
- chapter.moduleId || 0,
- chapter
- );
- } else {
- this.getBuySectionList(
- chapter.id,
- chapter.courseId,
- chapter.moduleId || 0,
- chapter
- );
- }
- }
- },
- getReSectionList(chapterId, courseId, moduleId, chapter) {
- this.$request
- .reSectionList({
- chapterId: chapterId,
- gradeId: this.gradeId,
- courseId: courseId,
- rebuild: 1,
- moduleId: moduleId,
- })
- .then((res) => {
- let newArr = res.data.filter((item) => {
- return item.type != 2;
- });
- chapter.canLearn = newArr.every((item) => {
- if (item.learning == 1) {
- return true;
- } else {
- return false;
- }
- });
- res.data.forEach((section) => {
- section.parent = chapter;
- });
- chapter.list = res.data;
- });
- },
- getBuySectionList(chapterId, courseId, moduleId = 0, chapter) {
- this.$request
- .reSectionList({
- chapterId: chapterId,
- gradeId: this.gradeId,
- courseId: courseId,
- moduleId: moduleId,
- })
- .then((res) => {
- let newArr = res.data.filter((item) => {
- return item.type != 2;
- });
- chapter.canLearn = newArr.every((item) => {
- if (item.learning == 1) {
- return true;
- } else {
- return false;
- }
- });
- res.data.forEach((section) => {
- section.parent = chapter;
- });
- chapter.list = res.data;
- });
- },
- getGoodsDetail() {
- let self = this;
- this.$request.goodsDetail(this.goodsId).then((res) => {
- self.goodsData = res.data;
- self.gradeId = self.goodsData.gradeId;
- if (this.goodsData.buyNote) {
- this.tabList = [
- { name: "1", label: "学员须知" },
- { name: "2", label: "课程答疑" },
- { name: "3", label: "笔记讲义" },
- ];
- } else {
- this.tabList = [
- { name: "1", label: "课程答疑" },
- { name: "2", label: "笔记讲义" },
- ];
- }
- this.courseBusiness();
- this.courseHandouts();
- if (self.goodsData.goodsPlayConfig) {
- self.goodsPlayConfig = JSON.parse(self.goodsData.goodsPlayConfig);
- if (self.goodsPlayConfig.autoPlay > 0) {
- self.autoplay = true;
- }
- if (self.goodsPlayConfig.drag > 0) {
- self.isAllowSeek = "yes";
- }
- if (self.goodsPlayConfig.speed > 0) {
- self.playbackRate = [0.5, 0.8, 1.0, 1.25, 1.5, 2.0];
- }
- }
- if (self.goodsData.goodsPhotographConfig) {
- self.goodsPhotographConfig = JSON.parse(
- self.goodsData.goodsPhotographConfig
- );
- if (self.goodsPhotographConfig.photoNum > 0) {
- self.photoNum = self.goodsPhotographConfig.photoNum;
- }
- }
- });
- },
- /**
- * 点击节
- */
- async getResource(section) {
- //逻辑
- if (section.type == 2) {
- //试卷
- console.log("试卷");
- console.log(section);
- let learnNum = await this.goodsTodayStudySectionNum();
- let hasLearn = await this.gradeCheckGoodsStudy(section.typeId);
- if (this.goodsData.sectionMaxNum > 0) {
- if (learnNum >= this.goodsData.sectionMaxNum && !hasLearn) {
- this.$message({
- type: "warning",
- message: `每天最多学习${this.goodsData.sectionMaxNum}节`,
- });
- return;
- }
- }
- if (this.businessData.goodsLearningOrder == 1) {
- if (section.parent.canLearn) {
- let num = await this.bankRecordDoNum(section);
- //有次数限制
- if (section.answerNum - num > 0 && section.answerNum > 0) {
- // this.$set(this.list[index],'doNum',(item.doNum+1))
- this.$router.push({
- path: "/course-exam/" + this.goodsId,
- query: {
- courseId: this.courseId,
- gradeId: this.gradeId,
- moduleId: section.moduleId || 0,
- examId: section.typeId,
- chapterId: section.chapterId || 0,
- orderGoodsId: this.orderGoodsId,
- },
- });
- //没有答题次数限制
- } else if (section.answerNum == 0) {
- this.$router.push({
- path: "/course-exam/" + this.goodsId,
- query: {
- courseId: this.courseId,
- gradeId: this.gradeId,
- moduleId: section.moduleId || 0,
- examId: section.typeId,
- chapterId: section.chapterId || 0,
- orderGoodsId: this.orderGoodsId,
- },
- });
- } else {
- this.$message({
- type: "warning",
- message: "该试卷只能答题" + section.answerNum + "次",
- });
- return;
- }
- } else {
- this.$message({
- type: "warning",
- message: "请按顺序学完视频课程再进行练习和测试",
- });
- }
- } else if (
- this.businessData.goodsLearningOrder == 2 &&
- !section.rebuild
- ) {
- let rows = await this.studyRecordMenuAllList();
- let isStop = false;
- let newRows = [];
- for (let i = 0; i < rows.length; i++) {
- let moduleTrue = rows[i].moduleId == section.moduleId;
- let chapterTrue = rows[i].chapterId == section.chapterId;
- if (moduleTrue && chapterTrue) {
- isStop = true;
- if (rows[i].sectionType != 2) {
- //忽略直播
- newRows.push(rows[i]);
- }
- } else {
- if (!isStop) {
- if (rows[i].sectionType != 2) {
- //忽略直播
- newRows.push(rows[i]);
- }
- } else {
- break;
- }
- }
- }
- console.log(newRows);
- let isAllLearn = newRows.every((item) => {
- return item.studyStatus == 1;
- });
- if (isAllLearn) {
- //之前的都学完了
- // if(canLearn) { //视频的上一节学完
- let num = await this.bankRecordDoNum(section.typeId);
- //有次数限制
- if (section.answerNum - num > 0 && section.answerNum > 0) {
- console.log(this.list[index]);
- this.$router.push({
- path: "/course-exam/" + this.goodsId,
- query: {
- courseId: this.courseId,
- gradeId: this.gradeId,
- moduleId: section.moduleId || 0,
- examId: section.typeId,
- chapterId: section.chapterId || 0,
- orderGoodsId: this.orderGoodsId,
- },
- });
- //没有答题次数限制
- } else if (section.answerNum == 0) {
- this.$router.push({
- path: "/course-exam/" + this.goodsId,
- query: {
- courseId: this.courseId,
- gradeId: this.gradeId,
- moduleId: section.moduleId || 0,
- examId: section.typeId,
- chapterId: section.chapterId || 0,
- orderGoodsId: this.orderGoodsId,
- },
- });
- } else {
- this.$message({
- type: "warning",
- message: "该试卷只能答题" + section.answerNum + "次",
- });
- return;
- }
- } else {
- this.$message({
- type: "warning",
- message: "请学完视频课程再进行练习和测试",
- });
- }
- } else {
- let num = await this.bankRecordDoNum(section.typeId);
- //有次数限制
- if (section.answerNum - section.doNum > 0 && section.answerNum > 0) {
- // this.$set(this.list[index],'doNum',(item.doNum+1))
- this.$router.push({
- path: "/course-exam/" + this.goodsId,
- query: {
- courseId: this.courseId,
- gradeId: this.gradeId,
- moduleId: section.moduleId || 0,
- examId: section.typeId,
- chapterId: section.chapterId || 0,
- orderGoodsId: this.orderGoodsId,
- },
- });
- //没有答题次数限制
- } else if (section.answerNum == 0) {
- this.$router.push({
- path: "/course-exam/" + this.goodsId,
- query: {
- courseId: this.courseId,
- gradeId: this.gradeId,
- moduleId: section.moduleId || 0,
- examId: section.typeId,
- chapterId: section.chapterId || 0,
- orderGoodsId: this.orderGoodsId,
- },
- });
- } else {
- this.$message({
- type: "warning",
- message: "该试卷只能答题" + section.answerNum + "次",
- });
- return;
- }
- }
- return;
- }
- if (section.type != 2) {
- if (
- this.playSectionId &&
- (this.playSectionId == section.sectionId ||
- this.playSectionId == section.menuId) &&
- this.moduleId == (section.moduleId || 0) &&
- this.chapterId == (section.chapterId || 0)
- ) {
- //切换为同一频道不作为
- return;
- }
- //提交保存观看历史
- if (this.playSectionId) {
- this.postStudyRecord(0, this.playSectionId);
- }
- this.player &&
- this.player.HTML5.video.removeEventListener(
- "timeupdate",
- this.timeEvent
- );
- //播放视频
- this.sectionItem = section;
- this.moduleId = section.moduleId || 0;
- this.chapterId = section.chapterId || 0;
- this.playSectionId = section.sectionId || section.menuId;
- console.log(this.moduleId, this.chapterId, this.playSectionId);
- await this.getPhotoLastRecord();
- this.recordObj = await this.getRecordLast();
- this.getNoteList();
- this.initVideo(section);
- }
- },
- bankRecordDoNum(section) {
- return new Promise((resolve) => {
- this.$request
- .bankRecordDoNum({
- goodsId: this.goodsId,
- gradeId: this.gradeId,
- chapterId: section.chapterId,
- courseId: this.courseId,
- moduleId: 0,
- examId: section.typeId,
- })
- .then((res) => {
- resolve(res.data);
- });
- });
- },
- /**
- * 是否有上一章节
- */
- hasPreItem(rows, option) {
- let moduleId = option.moduleId;
- let chapterId = option.chapterId;
- let sectionId = option.sectionId;
- let index = 0;
- for (let i = 0; i < rows.length; i++) {
- if (
- rows[i].moduleId == moduleId &&
- rows[i].chapterId == chapterId &&
- rows[i].sectionId == sectionId
- ) {
- index = i;
- break;
- }
- }
- if (i == 0) {
- return false;
- } else {
- return true;
- }
- },
- async initVideo(option) {
- if (this.businessData.goodsLearningOrder == 2 && !option.isRebuild) {
- //要按从头到尾顺序学习, 且不是重修课程
- let rows = await this.studyRecordMenuAllList();
- if (!this.hasPreItem(rows, option)) {
- //判断是否有上一节
- let newRows = [];
- for (let i = 0; i < rows.length; i++) {
- let moduleTrue =
- rows[i].moduleId == option.moduleId || rows[i].moduleId == 0;
- let chapterTrue =
- rows[i].chapterId == option.chapterId || rows[i].chapterId == 0;
- let sectionTrue =
- rows[i].sectionId == option.sectionId ||
- rows[i].sectionId == option.menuId;
- if (moduleTrue && chapterTrue && sectionTrue) {
- break;
- } else {
- if (rows[i].sectionType != 2) {
- newRows.push(rows[i]);
- }
- }
- }
- let isAllLearn = newRows.every((item) => {
- return item.studyStatus == 1;
- });
- if (isAllLearn) {
- this.playVideo(option);
- } else {
- this.$message({
- type: "warning",
- message: "请按顺序学习视频课程",
- });
- }
- } else {
- //第一章第一节
- this.playVideo(option);
- }
- } else {
- this.playVideo(option);
- }
- return;
- },
- /**
- * 判断是否是当前播放的节
- */
- isActive(section) {
- let moduleId = section.moduleId || 0;
- let chapterId = section.chapterId || 0;
- let sectionId = section.sectionId || section.menuId;
- if (
- moduleId == this.moduleId &&
- chapterId == this.chapterId &&
- sectionId == this.playSectionId
- ) {
- return true;
- } else {
- return false;
- }
- },
- async playVideo(option) {
- if (option.sectionType == 1 || option.sectionType == 3) {
- //录播
- let learnNum = await this.goodsTodayStudySectionNum(option);
- let hasLearn = await this.gradeCheckGoodsStudy(option);
- console.log(hasLearn, "hasLearn");
- console.log(learnNum, "learnNum");
- if (this.goodsData.sectionMaxNum > 0) {
- if (learnNum >= this.goodsData.sectionMaxNum && !hasLearn) {
- this.$message({
- type: "warning",
- message: `每天最多学习${this.goodsData.sectionMaxNum}节`,
- });
- return;
- }
- }
- if (!option.recordingUrl) {
- this.$message({
- type: "warning",
- message: `暂无播放地址数据`,
- });
- return;
- }
- if (this.playSectionId > 0) {
- //切换视频
- // let oldSectionId = this.playSectionId;
- // uni.$emit("changeSection", oldSectionId);
- }
- //设置播放的节ID
- await this.clears();
- this.vid = option.recordingUrl;
- this.loadPlayerScript(this.loadPlayer);
- // uni.$emit("levelId", this.levelId);
- // uni.$emit("getSection", this.menuItem);
- // uni.$emit("isRebuild", this.isRebuild);
- }
- if (option.sectionType == 2) {
- //直播
- let learnNum = await this.goodsTodayStudySectionNum(option);
- let hasLearn = await this.gradeCheckGoodsStudy(option);
- if (this.goodsData.sectionMaxNum > 0) {
- if (learnNum >= this.goodsData.sectionMaxNum && !hasLearn) {
- this.$message({
- type: "warning",
- message: `每天最多学习${this.goodsData.sectionMaxNum}节`,
- });
- return;
- }
- }
- if (!option.liveUrl) {
- this.$message({
- type: "warning",
- message: `暂无直播地址数据`,
- });
- }
- //设置播放的节ID
- await this.clears();
- this.vidzb = option.liveUrl;
- this.loadPlayerScriptzb(this.loadPlayerzb);
- // uni.$emit("levelId", this.levelId);
- // uni.$emit("getChannel", this.menuItem);
- // uni.$emit("isRebuild", this.isRebuild);
- // console.log(this.menuItem, "menuItem");
- }
- },
- gradeCheckGoodsStudy(option) {
- return new Promise((resolve) => {
- this.$request
- .gradeCheckGoodsStudy({
- goodsId: this.goodsId,
- gradeId: this.gradeId,
- moduleId: option.moduleId || 0,
- chapterId: option.chapterId || 0,
- sectionId: option.sectionId || option.menuId,
- })
- .then((res) => {
- resolve(res.data);
- });
- });
- },
- goodsTodayStudySectionNum(option) {
- return new Promise((resolve) => {
- this.$request
- .goodsTodayStudySectionNum({
- goodsId: this.goodsId,
- gradeId: this.gradeId,
- })
- .then((res) => {
- resolve(res.data);
- });
- });
- },
- studyRecordMenuAllList() {
- return new Promise((resolve) => {
- this.$request
- .studyRecordMenuAllList({
- courseId: this.courseId,
- gradeId: this.gradeId,
- goodsId: this.goodsId,
- })
- .then((res) => {
- resolve(res.data);
- });
- });
- },
- loadPlayerzb() {
- const polyvLivePlayer = window.polyvLivePlayer;
- this.playerzb = polyvLivePlayer({
- wrap: "#playerzb",
- width: 810,
- height: 455,
- uid: this.uidzb,
- vid: this.vidzb,
- });
- },
- loadPlayer() {
- var self = this;
- const polyvPlayer = window.polyvPlayer;
- self.$request.obtainpolyvvideosign(self.vid).then((res) => {
- self.player = polyvPlayer({
- wrap: "#player",
- width: 810,
- height: 455,
- speed: 2,
- vid: self.vid,
- watchStartTime: this.recordObj.videoCurrentTime,
- autoplay: true,
- teaser_show: 0,
- ts: res.data.ts,
- sign: res.data.sign,
- adMatter: [
- {
- // 广告参数详细配置
- location: 1, //广告位置: 1 片头广告,2 暂停广告,3 片尾广告,4 弹窗广告
- adtype: 2, //广告资源类型: 1 图片广告,2 视频广告,3 swf广告(flash播放器生效)
- matterurl: "https://www.runoob.com/try/demo_source/movie.mp4", //广告资源URL
- timesize: 5, //广告时长,单位:秒
- skipenabled: false, //是否显示跳过按钮
- },
- {
- // 广告参数详细配置
- location: 3, //广告位置: 1 片头广告,2 暂停广告,3 片尾广告,4 弹窗广告
- adtype: 2, //广告资源类型: 1 图片广告,2 视频广告,3 swf广告(flash播放器生效)
- matterurl: "https://www.runoob.com/try/demo_source/movie.mp4", //广告资源URL
- timesize: 5, //广告时长,单位:秒
- skipenabled: false, //是否显示跳过按钮
- },
- ],
- playsafe: function (vid, next) {
- next();
- },
- });
- this.player.HTML5.video.addEventListener("timeupdate", self.timeEvent);
- this.player.on("s2j_onPlayStart", () => {
- if (!this.recordObj.videoCurrentTime) {
- //新视频直接提交一条观看记录
- this.postStudyRecord(0);
- }
- });
- this.player.on("s2j_onPlayOver", () => {
- this.$message({
- type: "success",
- message: "播放完毕",
- });
- this.postStudyRecord(1);
- });
- });
- },
- timeEvent() {
- let self = this;
- var polyvPlayerContext = this.player;
- if (polyvPlayerContext) {
- this.playTime = polyvPlayerContext.j2s_getCurrentTime(); //播放时刻
- // console.log(this.playTime,789,this.photoHistoryList)
- //判断是否需要拍照
- if (this.photoNum > 0) {
- this.configPhoto();
- let photoTime = 0; //获取拍照秒数
- for (let i = 0; i < this.photoList.length; i++) {
- photoTime = Number(this.photoList[i]); //获取拍照秒数
- if (photoTime < this.playTime && photoTime > this.playTime - 8) {
- //3秒区间内才触发拍照,避免拉动滚动条
- if (
- this.photoHistoryList.indexOf(i) < 0 &&
- this.sectionItem.learning != 1
- ) {
- //不存在拍照历史,没有重修过,没有学过,则拍照
- //启动拍照
- //暂停
- polyvPlayerContext.j2s_pauseVideo();
- this.photoIndex = i;
- this.openPhoto();
- } else {
- }
- }
- }
- }
- }
- },
- getPhotoLastRecord() {
- return new Promise((resolve) => {
- let self = this;
- let data = {
- sectionId: parseInt(self.playSectionId),
- goodsId: parseInt(self.goodsId),
- courseId: parseInt(self.courseId),
- gradeId: parseInt(self.gradeId),
- chapterId: parseInt(self.chapterId),
- moduleId: parseInt(self.moduleId),
- };
- this.$request.getPhotoLastRecord(data).then((res) => {
- //清空历史数据
- self.photoHistoryList = [];
- this.photoIndex = 0;
- self.photoList = [];
- for (let i = 0; i < res.data.length; i++) {
- //-2存储随机拍照数组
- if (res.data[i].photoIndex == -2) {
- self.photoList = res.data[i].timeInterval.split(",");
- } else {
- self.photoHistoryList.push(res.data[i].photoIndex);
- }
- }
- resolve();
- });
- });
- },
- //拍照
- openPhoto() {
- var polyvPlayerContext = this.player;
- if (polyvPlayerContext) {
- if (this.isFullScreen()) {
- this.exitFullscreen();
- }
- }
- this.$nextTick(() => {
- if (
- (window.navigator.mediaDevices &&
- window.navigator.mediaDevices.getUserMedia) ||
- window.navigator.getUserMedia ||
- window.navigator.webkitGetUserMedia ||
- window.navigator.mozGetUserMedia
- ) {
- console.log(this.getUserMedia, "getUserMedia");
- // 调用用户媒体设备, 访问摄像头
- this.getUserMedia(
- {
- video: {
- width: 400,
- height: 300,
- },
- },
- this.photographSuccess,
- this.photographError
- );
- } else {
- this.photographError();
- }
- });
- },
- /**
- * 退出全屏
- */
- exitFullscreen() {
- try {
- var de = document;
- console.log(de);
- if (de.exitFullscreen) {
- de.exitFullscreen();
- } else if (de.mozCancelFullScreen) {
- de.mozCancelFullScreen();
- } else if (de.webkitCancelFullScreen) {
- de.webkitCancelFullScreen();
- }
- } catch (err) {}
- },
- fullele() {
- return (
- document.fullscreenElement ||
- document.webkitFullscreenElement ||
- document.msFullscreenElement ||
- document.mozFullScreenElement ||
- null
- );
- },
- //判断是否全屏
- isFullScreen() {
- return !!(document.webkitIsFullScreen || this.fullele());
- },
- //配置随机拍照时间
- configPhoto() {
- var polyvPlayerContext = this.player;
- let totalVideoTime = polyvPlayerContext.j2s_getDuration();
- let duration = polyvPlayerContext.j2s_getCurrentTime();
- let photoNum = this.photoNum;
- if (!this.photoConfig) {
- this.photoConfig = true;
- //没有历史拍照间隔数据
- if (this.photoList.length == 0) {
- if (totalVideoTime >= 900) {
- //大于15分钟
- if (photoNum == 1) {
- //开头拍1张
- this.photoList.push(1);
- } else if (photoNum == 3) {
- //拍3张
- this.photoList.push(0); //开头拍一张
- let centerTime = Math.floor(totalVideoTime / 2); //获取中间时间
- let centerMinTime = centerTime - 300; //前后5分钟
- let centerMaxTime = centerTime + 300;
- let centerTakeTime = this.randomNum(centerMinTime, centerMaxTime);
- this.photoList.push(centerTakeTime); //中间拍一张
- let endMaxTime = totalVideoTime - 60;
- let endMinTime = totalVideoTime - 300;
- let endTakeTime = this.randomNum(endMinTime, endMaxTime);
- this.photoList.push(endTakeTime); //最后拍一张
- }
- } else {
- //小于15分钟,只拍前后各一张
- if (photoNum == 1) {
- //开头拍1张
- this.photoList.push(1);
- } else if (photoNum == 3) {
- //拍2张
- if (totalVideoTime <= 300) {
- //小于5分钟
- this.photoList.push(1); //开头拍一张
- let endTakeTime = this.randomNum(10, totalVideoTime); //中间随机取一张
- this.photoList.push(endTakeTime);
- } else {
- this.photoList.push(1); //开头拍一张
- let endMaxTime = totalVideoTime - 60;
- let endMinTime = totalVideoTime - 300;
- let endTakeTime = this.randomNum(endMinTime, endMaxTime);
- this.photoList.push(endTakeTime); //最后1-5分钟拍一张
- }
- }
- }
- console.log(this.photoList, "随机拍照时间数组11", photoNum);
- this.postCoursePhotoRecord(true); //提交随机拍照时间数组
- }
- console.log(this.photoList, "随机拍照时间数组");
- //兼容已有观看历史
- for (let i = 0; i < this.photoList.length - 1; i++) {
- if (
- this.photoList[i] < duration &&
- this.photoList[i + 1] > duration
- ) {
- this.photoIndex = i + 1;
- // console.log("我的修改了photoIndex")
- break;
- }
- if (duration > this.photoList[this.photoList.length - 1]) {
- this.photoIndex = this.photoList.length - 1; //取最后一个下标
- // console.log("我的修改了photoIndex")
- break;
- }
- }
- }
- },
- randomNum(minNum, maxNum) {
- switch (arguments.length) {
- case 1:
- return parseInt(Math.random() * minNum + 1, 10);
- break;
- case 2:
- return parseInt(Math.random() * (maxNum - minNum + 1) + minNum, 10);
- break;
- default:
- return 0;
- break;
- }
- },
- //postTime 只提交随机时间
- postCoursePhotoRecord(postTime = false) {
- return new Promise((resolve, reject) => {
- let currentTime = 0;
- var polyvPlayerContext = this.player;
- if (polyvPlayerContext) {
- currentTime = polyvPlayerContext.j2s_getCurrentTime();
- }
- let self = this;
- let photoIndex = self.photoIndex;
- let data = {
- photo: self.ossAvatarUrl,
- sectionId: parseInt(self.playSectionId),
- goodsId: parseInt(self.goodsId),
- courseId: parseInt(self.courseId),
- photoTime: parseInt(currentTime > 0 ? currentTime : 0),
- gradeId: parseInt(self.gradeId),
- photoIndex: postTime ? -2 : parseInt(photoIndex), //从0算起,-2只提交随机时间
- photoNum: parseInt(self.photoNum),
- chapterId: parseInt(self.chapterId),
- moduleId: parseInt(self.moduleId),
- timeInterval: postTime ? self.photoList.join(",") : "",
- };
- console.log("提交接口", data);
- this.$request
- .coursePhotoRecord(data)
- .then((res) => {
- console.log(res, "res");
- resolve();
- })
- .catch((err) => {
- console.log(err, "err");
- reject();
- });
- });
- },
- /**
- * @param {String} 直播预览
- */
- loadPlayerScriptzb(callback) {
- if (!window.polyvLivePlayer) {
- const myScript = document.createElement("script");
- myScript.setAttribute("src", this.playerJs);
- myScript.onload = callback;
- document.body.appendChild(myScript);
- } else {
- callback();
- }
- },
- loadPlayerScript(callback) {
- if (!window.polyvPlayer) {
- const myScript = document.createElement("script");
- myScript.setAttribute("src", this.vodPlayerJs);
- myScript.onload = callback;
- document.body.appendChild(myScript);
- } else {
- callback();
- }
- },
- clears() {
- return new Promise((resolve, reject) => {
- this.vid = "";
- this.vidzb = "";
- if (this.player) {
- this.player.destroy();
- }
- if (this.playerzb) {
- this.playerzb.destroy();
- }
- resolve();
- });
- },
- /**
- * 提交观看记录
- */
- postStudyRecord(status = 0, sectionId = this.playSectionId) {
- let currentTime = 0;
- let PlayDuration = 0;
- var polyvPlayerContext = this.player;
- if (polyvPlayerContext) {
- currentTime = polyvPlayerContext.j2s_getCurrentTime(); //当前视频播放时刻
- PlayDuration = polyvPlayerContext.j2s_realPlayVideoTime(); //本次看的时长
- }
- if (this.vidzb) {
- currentTime = 2; //直播无法获取,无论开始结束都传2秒
- }
- let self = this;
- console.log(this);
- let data = {
- photo: self.ossAvatarUrl,
- sectionId: parseInt(this.playSectionId),
- goodsId: parseInt(this.goodsId),
- courseId: parseInt(this.courseId),
- studyDuration: parseInt(PlayDuration > 0 ? PlayDuration : 0),
- gradeId: parseInt(this.gradeId),
- chapterId: parseInt(this.chapterId),
- moduleId: parseInt(this.moduleId),
- videoCurrentTime: parseInt(currentTime > 0 ? currentTime : 0),
- };
- if (status > 0) {
- data.status = status;
- }
- this.$request
- .studyRecord(data)
- .then((res) => {
- if (status > 0) {
- //看完视频刷新父级列表
- let rebuildObj = this.getSameObj(this.sectionItem);
- this.refreshParentList(this.sectionItem, rebuildObj);
- }
- self.ossAvatarUrl = "";
- })
- .catch((err) => {
- console.log(err);
- this.$message({
- type: "warning",
- message: err.msg,
- });
- });
- },
- /**
- * 获取重修列表中是否有相同对象
- */
- getSameObj(metaObj) {
- let newObj = false;
- if (this.reMenuList.length) {
- console.log(this.reMenuList, "this.reMenuList");
- this.reMenuList.forEach((menu) => {
- if (menu.type == 3) {
- let isSame = this.contrast(metaObj, menu);
- if (isSame) {
- newObj = isSame;
- }
- } else {
- if (menu.list && menu.list.length) {
- menu.list.forEach((menuItem) => {
- if (menuItem.type == 1) {
- console.log(menuItem, metaObj);
- let isSame = this.contrast(metaObj, menuItem);
- if (isSame) {
- newObj = isSame;
- }
- } else {
- if (menuItem.list && menuItem.list.length) {
- menuItem.list.forEach((menuChild) => {
- if (menuChild.type == 1) {
- let isSame = this.contrast(metaObj, menuChild);
- if (isSame) {
- newObj = isSame;
- }
- }
- });
- }
- }
- });
- }
- }
- });
- return newObj;
- } else {
- return false;
- }
- },
- contrast(obj1, obj2) {
- let moduleId1 = obj1.moduleId || 0;
- let chapterId1 = obj1.chapterId || 0;
- let sectionId1 = obj1.sectionId || obj1.menuId;
- let moduleId2 = obj2.moduleId || 0;
- let chapterId2 = obj2.chapterId || 0;
- let sectionId2 = obj2.sectionId || obj2.menuId;
- //转字符串后对比是否一致
- return moduleId1 == moduleId2 &&
- chapterId1 == chapterId2 &&
- sectionId1 == sectionId2
- ? obj2
- : false;
- },
- /**
- * 刷新父级列表
- */
- refreshParentList(sectionItem, rebuildObj) {
- console.log(sectionItem, "sectionItem");
- console.log(rebuildObj, "rebuildObj");
- if (sectionItem.menuId) {
- //最外层节有menuid
- //普通章节目录
- let self = this;
- this.$request
- .reMenuList({ courseId: this.courseId, gradeId: this.gradeId })
- .then((res) => {
- for (let i = 0; i < res.rows.length; i++) {
- let item = res.rows[i];
- if (item.type == 3) {
- self.menuList[i].learning = item.learning;
- self.menuList[i].rebuild = item.rebuild;
- }
- }
- });
- if (this.menuTab.length > 1) {
- //有重修目录
- this.$request
- .reMenuList({
- courseId: this.courseId,
- gradeId: this.gradeId,
- rebuild: 1,
- })
- .then((res) => {
- for (let i = 0; i < res.rows.length; i++) {
- let item = res.rows[i];
- item.id = item.menuId;
- item.name = item.menuName;
- item.menuType = item.type;
- item.showList = false;
- item.list = [];
- item.isRebuild = 1;
- }
- self.reMenuList = self.reMenuList.filter((reMenu) => {
- //筛选剩下的选项
- return res.rows.find((row) => row.menuId == reMenu.menuId);
- });
- });
- }
- } else if (!sectionItem.moduleId) {
- //第二层节没有moduleid
- this.$request
- .reSectionList({
- chapterId: sectionItem.chapterId,
- gradeId: this.gradeId,
- courseId: this.courseId,
- moduleId: 0,
- })
- .then((res) => {
- let newArr = res.data.filter((item) => {
- return item.type != 2;
- });
- sectionItem.parent.canLearn = newArr.every((item) => {
- if (item.learning == 1) {
- return true;
- } else {
- return false;
- }
- });
- res.data.forEach((section) => {
- section.isRebuild = 1;
- section.parent = sectionItem.parent;
- });
- this.menuList.forEach((menu) => {
- if (menu.menuId == sectionItem.chapterId) {
- menu.list = res.data;
- }
- });
- });
- if (this.menuTab.length > 1 && rebuildObj) {
- this.$request
- .reSectionList({
- chapterId: rebuildObj.chapterId,
- gradeId: this.gradeId,
- courseId: this.courseId,
- moduleId: 0,
- rebuild: 1,
- })
- .then((res) => {
- let newArr = res.data.filter((item) => {
- return item.type != 2;
- });
- rebuildObj.parent.canLearn = newArr.every((item) => {
- if (item.learning == 1) {
- return true;
- } else {
- return false;
- }
- });
- res.data.forEach((section) => {
- section.parent = rebuildObj.parent;
- });
- this.reMenuList.forEach((menu) => {
- if (menu.menuId == rebuildObj.chapterId) {
- menu.list = res.data;
- }
- });
- });
- }
- } else {
- //第三层节有moduleid和chapterid都有
- this.$request
- .reSectionList({
- chapterId: sectionItem.chapterId,
- gradeId: this.gradeId,
- courseId: this.courseId,
- moduleId: sectionItem.moduleId,
- })
- .then((res) => {
- let newArr = res.data.filter((item) => {
- return item.type != 2;
- });
- sectionItem.parent.canLearn = newArr.every((item) => {
- if (item.learning == 1) {
- return true;
- } else {
- return false;
- }
- });
- res.data.forEach((section) => {
- section.parent = sectionItem.parent;
- });
- this.menuList.forEach((menu) => {
- if (menu.list && menu.list.length) {
- menu.list.forEach((chapter) => {
- if (
- chapter.moduleId == sectionItem.moduleId &&
- chapter.chapterId == sectionItem.chapterId
- ) {
- console.log(res.data, "res.data");
- console.log(chapter.list, "chapter.list");
- chapter.list = res.data;
- }
- });
- }
- });
- });
- if (this.menuTab.length > 1 && rebuildObj) {
- this.$request
- .reSectionList({
- chapterId: rebuildObj.chapterId,
- gradeId: this.gradeId,
- courseId: this.courseId,
- moduleId: rebuildObj.moduleId,
- rebuild: 1,
- })
- .then((res) => {
- let newArr = res.data.filter((item) => {
- return item.type != 2;
- });
- rebuildObj.parent.canLearn = newArr.every((item) => {
- if (item.learning == 1) {
- return true;
- } else {
- return false;
- }
- });
- res.data.forEach((section) => {
- section.parent = rebuildObj.parent;
- });
- this.reMenuList.forEach((menu) => {
- if (menu.list && menu.list.length) {
- menu.list.forEach((chapter) => {
- if (
- chapter.moduleId == rebuildObj.moduleId &&
- chapter.chapterId == rebuildObj.chapterId
- ) {
- chapter.list = res.data;
- }
- });
- }
- });
- });
- }
- }
- },
- getRecordLast() {
- let self = this;
- return new Promise((resolve) => {
- let data = {
- gradeId: Number(self.gradeId),
- goodsId: Number(self.goodsId),
- sectionId: Number(self.playSectionId),
- courseId: Number(self.courseId),
- chapterId: parseInt(self.chapterId),
- moduleId: parseInt(self.moduleId),
- };
- self.$request.recordLast(data).then((res) => {
- resolve(res.data);
- });
- });
- },
- /**
- * 获取笔记列表
- */
- getNoteList() {
- let self = this;
- self.noteList = [];
- let data = {
- courseId: this.courseId,
- gradeId: this.gradeId,
- goodsId: this.goodsId,
- pageNum: this.noteParams.pageNum,
- pageSize: this.noteParams.pageSize,
- };
- if (this.playSectionId > 0) {
- data.sectionId = this.playSectionId;
- }
- this.$request.noteList(data).then((res) => {
- self.noteList = res.rows;
- self.noteTotal = res.total;
- });
- },
- noteClick(note) {
- if (this.vid) {
- //切换视频
- var polyvPlayerContext = this.player;
- polyvPlayerContext.changeVid(note.recordingUrl);
- } else {
- this.vid = note.recordingUrl;
- note.sectionType = 3;
- this.initVideo(note);
- }
- this.recordObj = { videoCurrentTime: note.noteSecond };
- },
- getMenuList() {
- let self = this;
- this.$request
- .reMenuList({ courseId: this.courseId, gradeId: this.gradeId })
- .then((res) => {
- for (let i = 0; i < res.rows.length; i++) {
- let item = res.rows[i];
- item.id = item.menuId;
- item.name = item.menuName;
- item.menuType = item.type;
- item.showList = false;
- item.list = [];
- item.parent = this.menuList;
- }
- self.menuList = res.rows;
- });
- },
- getReMenuList() {
- let self = this;
- this.$request
- .reMenuList({
- courseId: this.courseId,
- rebuild: 1,
- gradeId: this.gradeId,
- })
- .then((res) => {
- for (let i = 0; i < res.rows.length; i++) {
- let item = res.rows[i];
- item.id = item.menuId;
- item.name = item.menuName;
- item.menuType = item.type;
- item.showList = false;
- item.list = [];
- item.parent = this.reMenuList;
- item.isRebuild = 1;
- }
- self.reMenuList = res.rows;
- if (self.reMenuList.length > 0) {
- this.menuTab = [
- {
- name: "1",
- label: "章节目录",
- },
- {
- name: "2",
- label: "重修目录",
- },
- ];
- this.courseTabIndex = "1";
- } else {
- this.menuTab = [
- {
- name: "1",
- label: "章节目录",
- },
- ];
- this.courseTabIndex = "1";
- }
- });
- },
- /**
- * 获取讲义权限
- */
- courseHandouts() {
- this.$request
- .courseHandouts(this.goodsData.handoutsId)
- .then((res) => {
- this.courseHandoutsData = res.data;
- })
- .catch((err) => {});
- },
- /**
- * 获取业务层次详情
- */
- courseBusiness() {
- this.$request.courseBusiness(this.goodsData.businessId).then((res) => {
- this.businessData = res.data;
- });
- },
- getAnswerList() {
- let self = this;
- this.$request
- .answerList({ courseId: this.courseId, goodsId: this.goodsId })
- .then((res) => {
- self.answerList = res.rows;
- });
- },
- courseCourseList() {
- this.param.goodsId = this.goodsId;
- this.param.gradeId = this.gradeId;
- this.$request.courseCourseList(this.param).then((res) => {
- this.courseList.push(...res.rows);
- if (!this.courseId) {
- this.courseId = this.courseList[0].courseId;
- }
- this.param.total = res.total;
- this.courseChange();
- });
- },
- download(url, fileName) {
- var a = document.createElement("a");
- var event = new MouseEvent("click");
- a.download = fileName;
- a.href = url;
- a.dispatchEvent(event);
- },
- previvew(url) {
- window.open(url, "_blank");
- },
- noteSubmit() {
- let self = this;
- if (!(this.playSectionId > 0)) {
- this.$message({
- message: "目前无播放视频",
- type: "warning",
- });
- return;
- }
- if (!this.textareaNote) {
- this.$message({
- message: "请输入内容",
- type: "warning",
- });
- return;
- }
- if (!this.gradeId) {
- this.$message({
- message: "暂无班级数据",
- type: "warning",
- });
- return;
- }
- var polyvPlayerContext = this.player;
- let noteDate = this.$tools.getZeroTime();
- let noteSecond = polyvPlayerContext.j2s_getCurrentTime();
- if (!noteSecond) {
- if (noteSecond == 0) {
- //播放结束
- noteSecond = polyvPlayerContext.j2s_getDuration();
- console.log(noteSecond, 63398);
- }
- if (!noteSecond) {
- this.$message({
- message: "视频暂未开始",
- type: "warning",
- });
- return;
- }
- }
- let data = {
- gradeId: this.gradeId,
- goodsId: this.goodsId,
- sectionId: this.playSectionId,
- courseId: this.courseId,
- noteText: this.textareaNote,
- noteDate: noteDate,
- noteSecond: noteSecond,
- };
- this.$request.postNote(data).then((res) => {
- this.$message({
- message: "发布成功",
- type: "success",
- });
- self.getNoteList();
- this.textareaNote = "";
- });
- },
- del(item) {
- console.log(item);
- let data = { answerId: item.answerId, status: -1 };
- this.$request.delAnswer(data).then((res) => {
- this.$message({
- message: "删除成功",
- type: "success",
- });
- this.getAnswerList();
- });
- },
- },
- };
- </script>
- <!-- Add "scoped" attribute to limit CSS to this component only -->
- <style scoped lang="scss">
- .course-detail {
- .section {
- padding-bottom: 30px;
- &__header {
- height: 40px;
- display: flex;
- align-items: center;
- padding: 0 20px;
- }
- &__body {
- .course-info {
- &__header {
- .left-box {
- width: 810px;
- height: 455px;
- float: left;
- background-size: cover;
- background-position: center center;
- background-repeat: no-repeat;
- .video {
- width: 100%;
- height: 100%;
- }
- }
- .right-box {
- width: 462px;
- height: 455px;
- background: #060e1a;
- border-radius: 0px;
- float: right;
- &__header {
- .tabs {
- /deep/.el-tabs__nav-wrap::after {
- background-color: #999;
- }
- /deep/ .el-tabs__header {
- margin: 0;
- }
- .label {
- color: #fff;
- height: 40px;
- line-height: 40px;
- padding: 0 20px;
- }
- .item {
- &__title {
- padding-left: 12px;
- height: 40px;
- line-height: 40px;
- cursor: pointer;
- font-size: 14px;
- font-family: Microsoft YaHei;
- font-weight: bold;
- color: #fff;
- .el-icon-caret-right,
- .el-icon-caret-bottom {
- color: #999;
- }
- }
- &__content {
- .bank-chapter {
- &__item {
- color: #fff;
- font-size: 14px;
- &__text {
- height: 40px;
- line-height: 40px;
- padding-left: 24px;
- cursor: pointer;
- flex: 1;
- .el-icon-caret-right,
- .el-icon-caret-bottom {
- color: #999;
- }
- }
- }
- }
- .bank-section {
- &__item {
- color: #fff;
- font-size: 14px;
- display: flex;
- align-items: center;
- &.active {
- background: #132b4d;
- font-size: 14px;
- font-family: Microsoft YaHei;
- font-weight: bold;
- color: #3f8dfd;
- }
- &__text {
- padding-left: 12px;
- flex: 1;
- height: 40px;
- line-height: 40px;
- cursor: pointer;
- .el-icon-caret-right,
- .el-icon-caret-bottom {
- color: #999;
- }
- }
- .test-btn {
- margin-left: 10px;
- width: 32px;
- height: 20px;
- background: #007aff;
- border-radius: 4px;
- line-height: 18px;
- color: #fff;
- text-align: center;
- }
- .note {
- margin-left: 10px;
- width: 32px;
- height: 20px;
- border: 1px solid #ff3b30;
- border-radius: 4px;
- line-height: 18px;
- color: #ff3b30;
- text-align: center;
- &--yellow {
- border-color: #ff9500;
- color: #ff9500;
- }
- &--blue {
- border-color: #3f8dfd;
- color: #3f8dfd;
- }
- }
- .during {
- color: #999;
- margin-right: 10px;
- }
- .btn {
- margin-right: 12px;
- width: 48px;
- height: 20px;
- border: 1px solid #ff3b30;
- background: #ff3b30;
- border-radius: 4px;
- line-height: 18px;
- color: #fff;
- text-align: center;
- &--green {
- border: 1px solid #34c759;
- background: #34c759;
- }
- }
- .live-btn {
- margin-left: 20px;
- width: 32px;
- height: 20px;
- border-radius: 4px;
- background: #eeeeee;
- line-height: 18px;
- color: #666666;
- text-align: center;
- &--yellow {
- background: #fff7eb;
- color: #ff9500;
- }
- &--blue {
- border-color: #ebf4ff;
- color: #007aff;
- }
- }
- }
- }
- }
- }
- }
- .title {
- height: 40px;
- border-bottom: 1px solid #999;
- color: #fff;
- .select {
- width: 100%;
- }
- /deep/ .el-input__icon {
- width: 20px;
- height: 20px;
- border: 1px solid #fff;
- border-radius: 4px;
- margin-top: 10px;
- line-height: 20px;
- }
- /deep/ .el-input__inner {
- color: #fff;
- font-size: 16px;
- background: none;
- border: 0;
- }
- }
- }
- &__body {
- height: 374px;
- overflow-y: scroll;
- &::-webkit-scrollbar {
- width: 6px;
- }
- &::-webkit-scrollbar-track {
- background-color: #060e1a;
- -webkit-border-radius: 2em;
- -moz-border-radius: 2em;
- border-radius: 2em;
- }
- &::-webkit-scrollbar-thumb {
- background-color: #eeeeee;
- -webkit-border-radius: 2em;
- -moz-border-radius: 2em;
- border-radius: 2em;
- }
- }
- }
- }
- &__body {
- /deep/ .el-tabs__item {
- padding: 0 20px !important;
- height: 80px;
- line-height: 80px;
- }
- .course-img {
- width: 100%;
- }
- .course-menu {
- margin-top: 25px;
- .left-box {
- width: 948px;
- float: left;
- &__header {
- padding-right: 50px;
- position: relative;
- .item {
- width: auto;
- margin-right: 24px;
- font-size: 16px;
- font-family: Microsoft YaHei;
- font-weight: 400;
- color: #333333;
- background: #eeeeee;
- border-radius: 8px;
- padding: 12px;
- position: relative;
- &.canlearn {
- background: #3f8dfd;
- color: #fff;
- }
- }
- }
- &__body {
- .item {
- margin-top: 24px;
- padding: 16px;
- background: #eee;
- border-radius: 10px;
- &__title {
- font-size: 16px;
- font-family: Microsoft YaHei;
- font-weight: bold;
- color: #333333;
- .note {
- display: inline-block;
- margin-left: 20px;
- width: 40px;
- height: 24px;
- border: 1px solid #ff3b30;
- border-radius: 8px;
- line-height: 22px;
- color: #ff3b30;
- text-align: center;
- }
- }
- &__content {
- margin-top: 12px;
- background: #f5f7fa;
- }
- }
- }
- }
- .right-box {
- width: 323px;
- float: right;
- .title {
- font-size: 16px;
- font-family: Microsoft YaHei;
- font-weight: 400;
- color: #333333;
- text-shadow: 0px 6px 6px rgba(85, 158, 255, 0.08);
- position: relative;
- .more {
- font-size: 16px;
- font-family: Microsoft YaHei;
- font-weight: 400;
- color: #999999;
- position: absolute;
- right: 0;
- top: 10px;
- }
- }
- .list {
- .course-item {
- margin: 110px 9px 0;
- width: 300px;
- height: 178px;
- background: #ffffff;
- box-shadow: 0px 10px 13px 3px rgba(63, 141, 253, 0.1);
- border-radius: 10px;
- position: relative;
- background: #fff;
- padding-top: 100px;
- &__img {
- width: 280px;
- height: 178px;
- background: #ffffff;
- box-shadow: 0px 0px 9px 1px rgba(0, 0, 0, 0.08);
- border-radius: 10px;
- position: absolute;
- left: 10px;
- top: -78px;
- background: rgba(122, 136, 246, 1);
- overflow: hidden;
- .note {
- width: 80px;
- height: 24px;
- background: #d94404;
- box-shadow: 0px 1px 1px 0px rgba(248, 78, 5, 0.4);
- border-radius: 10px 0px 20px 0px;
- text-align: center;
- line-height: 24px;
- color: #fff;
- }
- }
- &__title {
- margin: 0 8px;
- font-size: 14px;
- font-family: Microsoft YaHei;
- font-weight: 400;
- color: #333333;
- line-height: 24px;
- }
- &__desc {
- height: 32px;
- position: absolute;
- left: 0;
- right: 0;
- bottom: 0;
- margin-left: 8px;
- display: flex;
- justify-content: space-between;
- .price {
- font-size: 18px;
- font-family: Microsoft YaHei;
- font-weight: bold;
- color: #ff2d55;
- line-height: 32px;
- }
- .add {
- display: block;
- width: 118px;
- height: 32px;
- line-height: 30px;
- background: #f2f4f7;
- border-radius: 10px 0px 10px 0px;
- font-size: 16px;
- color: #3f8dfd;
- text-align: center;
- &:hover {
- background: #3f8dfd;
- color: #f2f4f7;
- }
- }
- }
- }
- }
- }
- }
- .answer-question {
- &__header {
- border-bottom: 1px solid #eee;
- .textarea-wrap {
- background: #f9f9f9;
- border: 1px solid #eeeeee;
- border-radius: 8px;
- .textarea {
- height: 100%;
- }
- }
- .submit {
- padding: 10px 20px;
- border-radius: 20px;
- text-align: center;
- font-size: 16px;
- margin: 10px 0;
- float: right;
- }
- }
- &__body {
- .question-list {
- &__item {
- padding: 20px 0;
- display: flex;
- &__avatar {
- width: 40px;
- height: 40px;
- display: table-cell;
- border-radius: 50%;
- text-align: center;
- img {
- display: inline-block;
- vertical-align: middle;
- max-width: 100%;
- max-height: 100%;
- }
- }
- &__content {
- flex: 1;
- border-bottom: 1px solid #ccc;
- margin-left: 10px;
- .nickname {
- font-size: 14px;
- font-family: Microsoft YaHei;
- font-weight: bold;
- color: #333333;
- line-height: 24px;
- }
- .desc {
- font-size: 14px;
- font-family: Microsoft YaHei;
- font-weight: 400;
- color: #666666;
- line-height: 24px;
- }
- .time {
- font-size: 14px;
- font-family: Microsoft YaHei;
- font-weight: 400;
- color: #999999;
- line-height: 24px;
- .replay {
- float: right;
- font-size: 14px;
- font-family: Microsoft YaHei;
- font-weight: 400;
- color: #3f8dfd;
- line-height: 24px;
- margin-right: 20px;
- }
- .del {
- float: right;
- cursor: pointer;
- font-size: 14px;
- font-family: Microsoft YaHei;
- font-weight: 400;
- color: #ff3b30;
- line-height: 24px;
- margin-right: 20px;
- }
- }
- .reply-list {
- margin: 20px 0;
- width: 100%;
- background: #f9f9f9;
- border-radius: 8px;
- padding: 0 0 0 20px;
- &__item {
- padding: 20px 0;
- display: flex;
- border-bottom: 1px solid #ccc;
- &:nth-last-of-type(1) {
- border: 0;
- }
- &__avatar {
- width: 40px;
- height: 40px;
- display: table-cell;
- border-radius: 50%;
- text-align: center;
- img {
- display: inline-block;
- vertical-align: middle;
- max-width: 100%;
- max-height: 100%;
- }
- }
- &__content {
- border-radius: 8px;
- flex: 1;
- margin-left: 10px;
- .nickname {
- font-size: 14px;
- font-family: Microsoft YaHei;
- font-weight: bold;
- color: #333333;
- line-height: 24px;
- }
- .desc {
- font-size: 14px;
- font-family: Microsoft YaHei;
- font-weight: 400;
- color: #666666;
- line-height: 24px;
- }
- .time {
- font-size: 14px;
- font-family: Microsoft YaHei;
- font-weight: 400;
- color: #999999;
- line-height: 24px;
- .reply {
- float: right;
- font-size: 14px;
- font-family: Microsoft YaHei;
- font-weight: 400;
- color: #3f8dfd;
- line-height: 24px;
- margin-right: 20px;
- }
- .del {
- cursor: pointer;
- margin-right: 20px;
- float: right;
- font-size: 14px;
- font-family: Microsoft YaHei;
- font-weight: 400;
- color: #ff3b30;
- line-height: 24px;
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- .lecture-notes {
- &__content {
- .left-box {
- float: left;
- width: 462px;
- .textarea {
- border-bottom: 1px solid #eee;
- .submit {
- float: right;
- width: 138px;
- padding: 10px 0;
- margin: 10px 0 25px 0;
- border-radius: 20px;
- text-align: center;
- font-size: 16px;
- }
- }
- .note-list {
- &__content {
- border-bottom: 1px solid #eee;
- &__title {
- width: 216px;
- height: 24px;
- background: #ccc;
- border-radius: 24px;
- font-size: 14px;
- color: #666666;
- text-align: center;
- line-height: 24px;
- margin: 20px 0;
- }
- }
- &__item {
- display: flex;
- padding: 15px;
- .el-icon-video-play {
- cursor: pointer;
- font-size: 20px;
- color: #3f8dfd;
- }
- &__content {
- flex: 1;
- margin-left: 10px;
- .title {
- cursor: pointer;
- font-size: 14px;
- font-family: Microsoft YaHei;
- font-weight: bold;
- color: #3f8dfd;
- line-height: 24px;
- }
- .desc {
- font-size: 14px;
- font-family: Microsoft YaHei;
- font-weight: 400;
- color: #666666;
- line-height: 24px;
- }
- .time {
- font-size: 14px;
- font-family: Microsoft YaHei;
- font-weight: 400;
- color: #999999;
- line-height: 24px;
- }
- }
- }
- }
- .pagination {
- margin-top: 30px;
- text-align: center;
- }
- }
- .right-box {
- width: 786px;
- float: right;
- .lecture-list {
- background: #f5f7fa;
- border-radius: 8px;
- &__header {
- padding: 0 16px;
- height: 40px;
- line-height: 40px;
- font-size: 18px;
- font-family: Microsoft YaHei;
- font-weight: bold;
- color: #333333;
- .slide-btn {
- cursor: pointer;
- float: right;
- font-size: 14px;
- font-family: Microsoft YaHei;
- font-weight: 400;
- color: #999999;
- }
- }
- &__body {
- .list {
- &__item {
- border-top: 1px solid #fff;
- padding: 0 8px 0 16px;
- height: 56px;
- line-height: 55px;
- display: flex;
- align-items: center;
- .title {
- flex: 1;
- font-size: 16px;
- font-family: Microsoft YaHei;
- font-weight: 400;
- color: #333333;
- }
- .btns {
- .btn {
- cursor: pointer;
- display: inline-block;
- vertical-align: middle;
- width: 80px;
- height: 32px;
- background: #ffffff;
- border: 1px solid #3f8dfd;
- border-radius: 16px;
- text-align: center;
- line-height: 30px;
- color: #3f8dfd;
- margin: 0 8px;
- }
- }
- }
- }
- }
- &__footer {
- margin-top: 24px;
- .lecture-scan {
- background: #f5f7fa;
- border-radius: 8px;
- overflow: hidden;
- &__header {
- height: 40px;
- line-height: 40px;
- padding: 0 16px;
- font-size: 16px;
- font-family: Microsoft YaHei;
- font-weight: bold;
- color: #333333;
- }
- &__body {
- height: 800px;
- .iframe {
- width: 100%;
- height: 100%;
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- .take-photo {
- /deep/ .el-dialog__header {
- display: none;
- }
- /deep/ .el-dialog__body {
- padding: 0;
- overflow: unset;
- }
- &__close {
- cursor: pointer;
- position: absolute;
- right: 0;
- top: -28px;
- width: 24px;
- height: 24px;
- line-height: 24px;
- text-align: center;
- color: #eee;
- border: 1px solid #eee;
- border-radius: 50%;
- }
- &__header {
- height: 40px;
- border-bottom: 1px solid #eee;
- line-height: 40px;
- font-size: 16px;
- font-family: Microsoft YaHei;
- font-weight: bold;
- color: #333333;
- padding-left: 24px;
- }
- &__body {
- height: 400px;
- padding: 40px 24px;
- .left-box {
- width: 336px;
- float: left;
- .title {
- font-size: 16px;
- font-family: Microsoft YaHei;
- font-weight: bold;
- color: #ff3b30;
- line-height: 24px;
- }
- .content {
- font-size: 14px;
- font-family: Microsoft YaHei;
- font-weight: 400;
- color: #333333;
- line-height: 28px;
- margin-top: 32px;
- }
- }
- .right-box {
- float: right;
- width: 400px;
- height: 300px;
- video {
- width: 100%;
- height: 100%;
- }
- }
- }
- &__footer {
- height: 90px;
- border-top: 1px solid #eee;
- text-align: center;
- .take {
- display: inline-block;
- width: 200px;
- height: 40px;
- padding: 0;
- border-radius: 20px;
- text-align: center;
- line-height: 40px;
- margin: 24px auto;
- }
- }
- }
- }
- </style>
|