addCourse.vue 104 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639
  1. <template>
  2. <div class="pb_content">
  3. <div class="pb_content_body" style="position: relative">
  4. <div class="right">
  5. <div
  6. style="
  7. display: flex;
  8. flex-direction: row;
  9. justify-content: flex-start;
  10. align-items: center;
  11. width: 100%;
  12. background: #fff;
  13. border-radius: 10px;
  14. "
  15. >
  16. <div
  17. style="
  18. display: flex;
  19. flex-direction: row;
  20. justify-content: flex-start;
  21. align-items: center;
  22. border-radius: 80px;
  23. box-shadow: 0px 1px 2px 3px #f2f2f2;
  24. margin: 30px 20px 20px 45px;
  25. min-width: 420px;
  26. "
  27. >
  28. <h3 class="info_title" v-if="steps == 1">项目内容填写</h3>
  29. <h3 class="info_title" v-if="steps == 2">请选择文档模板</h3>
  30. <h3 class="info_title" v-if="steps == 3">项目内容填写</h3>
  31. <h3 class="info_title" v-if="steps == 4">上传项目</h3>
  32. <el-breadcrumb separator-class="el-icon-arrow-right" style="margin-top: 15px">
  33. <el-breadcrumb-item :to="{ path: '/course?userid=' + userid + '&oid=' + oid }">项目管理</el-breadcrumb-item>
  34. <el-breadcrumb-item>添加项目</el-breadcrumb-item>
  35. </el-breadcrumb>
  36. </div>
  37. <div
  38. v-if="steps == 1 || steps == 2 || steps == 3"
  39. style="
  40. font-size: 25px;
  41. color: #dedede;
  42. font-weight: bold;
  43. margin-left: auto;
  44. margin-right: 2%;
  45. "
  46. >
  47. {{
  48. steps == 1
  49. ? "第一步"
  50. : steps == 2
  51. ? "第二步"
  52. : steps == 3
  53. ? "第三步"
  54. : ""
  55. }}
  56. </div>
  57. </div>
  58. <div style="display: flex; margin-top: 20px">
  59. <div class="stepBg" :class="steps == 3 ? 'isHeight' : ''">
  60. <div v-if="steps == 1" class="first" @click="navSteps(1)">
  61. <div>
  62. <img src="../../assets/icon/first.png" alt />
  63. </div>
  64. <div>填写基本信息</div>
  65. </div>
  66. <div v-else class="firstNo" @click="navSteps(1)">
  67. <div>
  68. <img src="../../assets/icon/firstNo.png" alt />
  69. </div>
  70. <div>填写基本信息</div>
  71. </div>
  72. <div v-if="steps == 2" class="second" @click="navSteps(2)">
  73. <div>
  74. <img src="../../assets/icon/second.png" alt />
  75. </div>
  76. <div>选择文档模板</div>
  77. </div>
  78. <div v-else class="secondNo" @click="navSteps(2)">
  79. <div>
  80. <img src="../../assets/icon/secondNo.png" alt />
  81. </div>
  82. <div>选择文档模板</div>
  83. </div>
  84. <div v-if="steps == 3" class="third" @click="navSteps(3)">
  85. <div>
  86. <img src="../../assets/icon/third.png" alt />
  87. </div>
  88. <div>上传项目内容</div>
  89. </div>
  90. <div v-else class="thirdNo" @click="navSteps(3)">
  91. <div>
  92. <img src="../../assets/icon/thirdNo.png" alt />
  93. </div>
  94. <div>上传项目内容</div>
  95. </div>
  96. <div v-if="steps == 4" class="four">
  97. <div>
  98. <img src="../../assets/icon/four.png" alt />
  99. </div>
  100. <div>上传完成</div>
  101. </div>
  102. <div v-else class="fourNo">
  103. <div>
  104. <img src="../../assets/icon/fourNo.png" alt />
  105. </div>
  106. <div>上传完成</div>
  107. </div>
  108. </div>
  109. <div
  110. style=" width: calc(100% - 17% - 25px);
  111. background: #fff;
  112. border-radius: 10px;
  113. min-height: 550px;
  114. min-width: 800px;"
  115. v-if="this.steps == 1"
  116. >
  117. <div class="whiteBg">
  118. <div class="right_title">项目名称与分类</div>
  119. <div class="basic_box">
  120. <div class="big_box">
  121. <div class="left_first">
  122. <div>
  123. <div>
  124. <div class="bInfo_title" style="margin-bottom: 15px">
  125. <span style="color: red">*</span>项目名称
  126. </div>
  127. <div style="display: flex">
  128. <img
  129. src="../../assets/icon/projectName.png"
  130. alt
  131. style="margin-right: 8px"
  132. />
  133. <input
  134. type="text"
  135. placeholder="请输入项目名称"
  136. class="binfo_input"
  137. v-model="courseName"
  138. />
  139. </div>
  140. </div>
  141. <div class="both">
  142. <div class="choose">
  143. <div
  144. class="all_choose"
  145. v-for="(item, index) in CourseType[0]"
  146. :key="index"
  147. >
  148. <span>{{ item.name }}</span>
  149. <el-checkbox-group v-model="courseTypeId">
  150. <el-checkbox
  151. v-for="item1 in CourseTypeJson[item.id]"
  152. :key="item1.id"
  153. :label="item1.id"
  154. >{{ item1.name }}</el-checkbox>
  155. </el-checkbox-group>
  156. </div>
  157. </div>
  158. </div>
  159. </div>
  160. </div>
  161. </div>
  162. </div>
  163. </div>
  164. <div class="whiteBg" style="border-radius: 0">
  165. <div class="right_first">
  166. <div class="right_title">上传封面与成员</div>
  167. <div
  168. style="
  169. padding: 0 0 50px 0;
  170. display: flex;
  171. align-items: baseline;
  172. justify-content: flex-start;
  173. "
  174. >
  175. <div style="margin: 45px 0px 0px 80px">
  176. <div class="bInfo_title" style="margin-top: 0 !important">
  177. <span style="color: red">*</span>课程封面
  178. </div>
  179. <el-upload
  180. :class="{ disUoloadSty: noneBtnImg }"
  181. class="upCss"
  182. action="#"
  183. list-type="picture"
  184. v-loading="uploadLoading1"
  185. :http-request="beforeUpload1"
  186. ref="upload1"
  187. :on-preview="handlePictureCardPreview"
  188. :on-remove="handle_remove1"
  189. :show-file-list="true"
  190. :file-list="cover"
  191. accept="image/*"
  192. :limit="1"
  193. :on-exceed="onExceed"
  194. >
  195. <i class="el-icon-plus"></i>
  196. </el-upload>
  197. </div>
  198. <div
  199. style="
  200. display: flex;
  201. flex-flow: row nowrap;
  202. flex-direction: row;
  203. align-items: baseline; ;
  204. "
  205. >
  206. <div style="margin: 0 80px">
  207. <div class="bInfo_title">
  208. <!-- <span style="color: red">*</span>选择项目成员 -->
  209. 选择项目成员
  210. </div>
  211. <div
  212. class="addPeople"
  213. @click="addPP"
  214. v-if="this.checkboxList.length == 0"
  215. >添加成员</div>
  216. <div class="addPeople" @click="addPP" v-else>已添加,点击查看</div>
  217. </div>
  218. <div style="flex: 0.5 1 0%; margin-top: 30px">
  219. <div class="bInfo_title">协同编辑</div>
  220. <div
  221. class="addPeople"
  222. @click="dialogVisible4 = true"
  223. style="background: #6b92c9"
  224. >添加协同成员</div>
  225. </div>
  226. </div>
  227. </div>
  228. </div>
  229. </div>
  230. <div class="whiteBg" style="border-radius: 0; margin-top: 15px">
  231. <div class="right_title">项目简要描述</div>
  232. <div style="width: 55%; padding: 10px 0 10px 80px">
  233. <div class="bInfo_title">
  234. <span style="color: red">*</span>简要描述
  235. </div>
  236. <div>
  237. <textarea rows="8" class="binfo_input" cols v-model="courseText"></textarea>
  238. </div>
  239. </div>
  240. <el-switch
  241. v-model="isTeacherSee"
  242. active-text="允许给其他老师查看"
  243. style="margin: 30px 0px 10px 110px; padding-bottom: 30px"
  244. ></el-switch>
  245. </div>
  246. </div>
  247. <div
  248. style="
  249. width: calc(100% - 17% - 25px);
  250. background: #fff;
  251. border-radius: 10px;
  252. min-height: 550px;
  253. min-width: 800px;
  254. "
  255. v-if="this.steps == 2"
  256. >
  257. <div class="basic_box" style="margin: 20px 30px 0 !important">
  258. <div
  259. style="
  260. color: #b8b8b8;
  261. background: #fff;
  262. width: 26%;
  263. height: 40px;
  264. border-radius: 15px;
  265. padding-left: 20px;
  266. line-height: 40px;
  267. font-size: 17px;
  268. box-shadow: 0px 1px 2px 2px #e0e0e0;
  269. "
  270. >请选择合适的项目模板</div>
  271. <div class="wordbox">
  272. <div
  273. class="wordTeacher"
  274. v-for="(aa, indexF) in templateArray"
  275. :key="indexF"
  276. @click="checkTemplate(aa)"
  277. >
  278. <div class="wordPic">
  279. <img src="../../assets/icon/wordMub.png" alt />
  280. </div>
  281. <div
  282. style="
  283. margin-top: 10px;
  284. line-height: 19px;
  285. overflow: hidden;
  286. text-overflow: ellipsis;
  287. white-space: nowrap;
  288. padding: 0 20px;
  289. "
  290. >{{ aa.title }}</div>
  291. <div class="checkword">
  292. <img
  293. src="../../assets/icon/checked.png"
  294. alt
  295. v-if="clearArray.indexOf(aa.id) == 0"
  296. />
  297. <img src="../../assets/icon/check.png" alt v-else />
  298. </div>
  299. </div>
  300. <div
  301. class="wordTeacher"
  302. @click="checkTemplate1(myWord)"
  303. v-if="cid != '' && cid != undefined"
  304. >
  305. <div class="wordPic">
  306. <img src="../../assets/icon/wordMub.png" alt />
  307. </div>
  308. <div
  309. style="
  310. margin-top: 10px;
  311. line-height: 19px;
  312. overflow: hidden;
  313. text-overflow: ellipsis;
  314. white-space: nowrap;
  315. padding: 0 20px;
  316. "
  317. >我的文档</div>
  318. <div class="checkword">
  319. <img
  320. src="../../assets/icon/checked.png"
  321. alt
  322. v-if="
  323. cid != '' && cid != undefined && clearArray.length == 0
  324. "
  325. />
  326. <img src="../../assets/icon/check.png" alt v-else />
  327. </div>
  328. </div>
  329. </div>
  330. </div>
  331. </div>
  332. <div
  333. style="
  334. width: calc(100% - 17% - 25px);
  335. background: #fff;
  336. border-radius: 10px;
  337. min-height: 550px;
  338. min-width: 800px;
  339. "
  340. v-if="this.steps == 3"
  341. >
  342. <div class="basic_box" style="margin: 0px 0 0 30px">
  343. <div style="display: flex; flex-direction: row; align-items: center">
  344. <div class="cru_selectBox">
  345. <div
  346. v-for="(item, index) in unitJson"
  347. :key="index"
  348. class="cru_select"
  349. :class="unitIndex == index ? 'cru_selected' : ''"
  350. @click="unitSet(index)"
  351. >第{{ index + 1 }}阶段</div>
  352. <img
  353. src="../../assets/line.png"
  354. class="cru_line"
  355. :style="{
  356. left: offsetLetfPx + 'px',
  357. }"
  358. />
  359. </div>
  360. <div class="addStageImg" @click="addunit()">
  361. <img src="../../assets/icon/add.png" alt />
  362. </div>
  363. </div>
  364. <div
  365. style="margin: 0 0 40px 0"
  366. v-for="(item, index) in unitJson[unitIndex].chapterInfo"
  367. :key="index"
  368. >
  369. <div>
  370. <div class="chapter_contentbox">
  371. <div>第{{ unitIndex + 1 }}阶段</div>
  372. <div>
  373. <input
  374. type="text"
  375. placeholder="阶段标题"
  376. class="binfo_input"
  377. v-model="unitJson[unitIndex].dyName"
  378. />
  379. </div>
  380. <div v-if="unitJson.length > 1" @click="deleteUnit(unitIndex)"></div>
  381. </div>
  382. </div>
  383. <div style="margin: 50px 0 10px 0; font-size: 24px">添加任务</div>
  384. <div
  385. class="taskBorder"
  386. v-for="(itemTask, itemTaskIndex) in item.taskJson"
  387. :key="itemTaskIndex"
  388. >
  389. <div>
  390. <div>
  391. <div
  392. style="
  393. font-weight: unset;
  394. font-size: 1.3rem;
  395. width: 110px;
  396. color: #b7b7b7;
  397. "
  398. >任务 {{ itemTaskIndex + 1 }}</div>
  399. <div
  400. class="chapter_contentbox"
  401. style="
  402. flex-direction: row;
  403. justify-content: flex-start;
  404. align-items: center;
  405. "
  406. >
  407. <div
  408. style="
  409. font-weight: unset;
  410. font-size: 1.3rem;
  411. width: 110px;
  412. "
  413. >任务名称</div>
  414. <div>
  415. <input
  416. type="text"
  417. placeholder="输入任务名称"
  418. class="binfo_input"
  419. style="height: 50px; border-radius: 4px"
  420. v-model="
  421. unitJson[unitIndex].chapterInfo[0].taskJson[
  422. itemTaskIndex
  423. ].task
  424. "
  425. />
  426. </div>
  427. </div>
  428. <div style="margin: 30px 0 10px; font-size: 16px">任务描述</div>
  429. <div>
  430. <textarea
  431. rows="6"
  432. class="binfo_input"
  433. placeholder="请输入任务描述"
  434. cols
  435. style="width: 70.5% !important; height: 120px"
  436. v-model="
  437. unitJson[unitIndex].chapterInfo[0].taskJson[
  438. itemTaskIndex
  439. ].taskDetail
  440. "
  441. ></textarea>
  442. </div>
  443. </div>
  444. </div>
  445. <div
  446. class="basic_box"
  447. style="
  448. margin: 0;
  449. min-height: 0;
  450. width: 66% !important;
  451. paddint-top: 10px !important;
  452. "
  453. >
  454. <div
  455. style="
  456. display: flex;
  457. margin: 0 0 20px 0;
  458. flex-direction: row;
  459. justify-content: flex-start;
  460. align-items: center;
  461. "
  462. >
  463. <div
  464. style="
  465. font-size: 1.5em;
  466. font-weight: bold;
  467. margin-top: 15px;
  468. width: 110px;
  469. min-width: 110px;
  470. "
  471. >任务学习</div>
  472. <div class="line"></div>
  473. </div>
  474. <div>
  475. <div
  476. class="add_chapters_box"
  477. v-if="
  478. itemTask.chapterData &&
  479. itemTask.chapterData.length == 0
  480. "
  481. style="height: 185px"
  482. ></div>
  483. <div
  484. v-else
  485. class="add_chapters_box"
  486. style="display: flex; flex-direction: column"
  487. >
  488. <div
  489. class="chapter_upload"
  490. v-for="(item1, index1) in itemTask.chapterData"
  491. :key="item1.id"
  492. @click="
  493. getChapterData(
  494. $event,
  495. unitIndex,
  496. index,
  497. index1,
  498. item1.type
  499. )
  500. "
  501. >
  502. <div class="chapter_upload_t" style="width: 100%"></div>
  503. <div
  504. class="chapter_upload_o"
  505. style="
  506. position: relative;
  507. display: flex;
  508. align-items: center;
  509. "
  510. >
  511. <div class="chapter_upload_l" style="padding: 1px 0 0 10px">
  512. <div v-if="item1.type == 2" class="chapter_upload_l_i1"></div>
  513. <div
  514. v-if="item1.type == 3 || item1.type == 6"
  515. class="chapter_upload_l_i5"
  516. style="margin-right: 4px"
  517. ></div>
  518. </div>
  519. <div
  520. class="chapter_upload_ic"
  521. style="
  522. cursor: pointer;
  523. position: absolute;
  524. width: 45px;
  525. right: 0;
  526. top: 0;
  527. "
  528. >
  529. <div class="chapter_upload_ic_l"></div>
  530. <div
  531. class="chapter_upload_ic_r"
  532. style="position: absolute"
  533. @click.stop="
  534. deleteChapterData(
  535. $event,
  536. unitIndex,
  537. index,
  538. index1
  539. )
  540. "
  541. >
  542. <div></div>
  543. </div>
  544. </div>
  545. <div class="chapter_upload_n">
  546. <input
  547. v-if="item1.type == 2 || item1.type == 3"
  548. :placeholder="item1.name"
  549. @change="
  550. updataVideoT(
  551. $event,
  552. unitIndex,
  553. chapterIndex,
  554. index1
  555. )
  556. "
  557. style="
  558. border: none;
  559. outline: none;
  560. width: 55%;
  561. minwidth: 215px;
  562. z-index: 99;
  563. font-size: 14px;
  564. "
  565. />
  566. <input
  567. :placeholder="item1.name"
  568. v-else
  569. style="
  570. border: none;
  571. outline: none;
  572. width: 55%;
  573. minwidth: 215px;
  574. "
  575. readonly="true"
  576. @click="selectAttText(index1)"
  577. />
  578. <div class="chapter_upload_ud" style="z-index: 99">
  579. <div
  580. class="chapter_upload_up"
  581. @click="
  582. upCd($event, unitIndex, index, index1)
  583. "
  584. ></div>
  585. <div
  586. class="chapter_upload_down"
  587. @click="
  588. downCd($event, unitIndex, index, index1)
  589. "
  590. ></div>
  591. </div>
  592. </div>
  593. </div>
  594. </div>
  595. </div>
  596. </div>
  597. <div class="add_info_box">
  598. <button class="info_btn" @click="addImg($event)">
  599. 教学视频添加
  600. <input
  601. type="file"
  602. accept="video/mp4, video/quicktime, video/x-msvideo"
  603. style="display: none"
  604. v-if="inputShow"
  605. @change="
  606. beforeUpload2($event, unitIndex, 2, itemTaskIndex)
  607. "
  608. />
  609. </button>
  610. <button class="info_btn" @click="addImg($event)">
  611. 教学附件添加
  612. <input
  613. type="file"
  614. accept="application/pdf, .ppt, .pptx, application/msword, application/vnd.openxmlformats-officedocument.wordprocessingml.document"
  615. style="display: none"
  616. v-if="inputShow"
  617. @change="
  618. beforeUpload2($event, unitIndex, 3, itemTaskIndex)
  619. "
  620. />
  621. </button>
  622. <button class="info_btn" @click="addAttText(itemTaskIndex)">附文本添加</button>
  623. </div>
  624. </div>
  625. <div
  626. style="
  627. flex-direction: row;
  628. justify-content: flex-start;
  629. align-items: center;
  630. padding: 0 0 0 30px;
  631. paddint-top: 10px !important;
  632. "
  633. >
  634. <div
  635. style="
  636. display: flex;
  637. flex-direction: row;
  638. align-items: center;
  639. margin-bottom: 20px;
  640. "
  641. >
  642. <div
  643. style="
  644. font-size: 1.5em;
  645. font-weight: bold;
  646. margin-top: 15px;
  647. "
  648. >任务过程</div>
  649. <div class="line" style="width: 90%"></div>
  650. </div>
  651. </div>
  652. <div class="toolChoose" style="padding: 0 0 0 30px">
  653. <div class="tools">
  654. <div
  655. class="leftTools"
  656. style="
  657. width: 95%;
  658. padding: 0 0 15px 0;
  659. border-bottom: 1px solid #efefef;
  660. margin-bottom: 15px;
  661. "
  662. v-for="(itemTool, toolIndex) in itemTask.toolChoose"
  663. :key="toolIndex"
  664. >
  665. <div
  666. style="
  667. display: flex;
  668. flex-direction: row;
  669. align-items: baseline;
  670. flex-wrap: nowrap;
  671. justify-content: flex-start;
  672. position: relative;
  673. "
  674. >
  675. <div style="margin-right: 20px">工具 {{ toolIndex + 1 }} :</div>
  676. <div class="chooseWho">
  677. <div
  678. :class="itemTool.toolType == 0 ? 'isChooseActive' : ''"
  679. @click="itemTool.toolType = 0"
  680. >展示类</div>
  681. <div
  682. :class="itemTool.toolType == 1 ? 'isChooseActive' : ''"
  683. @click="itemTool.toolType = 1"
  684. >思维类</div>
  685. <div
  686. :class="itemTool.toolType == 2 ? 'isChooseActive' : ''"
  687. @click="itemTool.toolType = 2"
  688. >评价类</div>
  689. </div>
  690. <div
  691. class="remove"
  692. @click="deleteTool(itemTaskIndex,toolIndex)"
  693. v-if="itemTask.toolChoose.length > 1"
  694. style="position: absolute; right: 55px"
  695. ></div>
  696. </div>
  697. <div style="min-height: 163px">
  698. <div class="toolSort" v-if="itemTool.toolType == 0">
  699. <div class="tool">
  700. <div
  701. class="whiteBIcon"
  702. @click="addTools(8, itemTaskIndex, toolIndex)"
  703. >
  704. <img src="../../assets/icon/secondToolList/library.png" alt />
  705. <div style="margin: 5px 0">素材库</div>
  706. </div>
  707. <div class="check" @click="addTools(8, itemTaskIndex, toolIndex)">
  708. <img
  709. src="../../assets/icon/checkNo.png"
  710. alt
  711. v-if="itemTool.tool != 8"
  712. />
  713. <img src="../../assets/icon/checkedIs.png" alt v-else />
  714. </div>
  715. </div>
  716. </div>
  717. <div class="toolSort" v-if="itemTool.toolType == 1">
  718. <div class="tool">
  719. <div
  720. class="whiteBIcon"
  721. @click="addTools(7, itemTaskIndex, toolIndex)"
  722. >
  723. <img src="../../assets/icon/secondToolList/mindNetwork.png" alt />
  724. <div style="margin: 5px 0">思维网格</div>
  725. </div>
  726. <div class="check" @click="addTools(7, itemTaskIndex, toolIndex)">
  727. <img
  728. src="../../assets/icon/checkNo.png"
  729. alt
  730. v-if="itemTool.tool != 7"
  731. />
  732. <img src="../../assets/icon/checkedIs.png" alt v-else />
  733. </div>
  734. </div>
  735. <div class="tool">
  736. <div
  737. class="whiteBIcon"
  738. @click="addTools(1, itemTaskIndex, toolIndex)"
  739. >
  740. <img src="../../assets/icon/secondToolList/whiteBoard.png" alt />
  741. <div style="margin: 5px 0">电子白板</div>
  742. </div>
  743. <div class="check" @click="addTools(1, itemTaskIndex, toolIndex)">
  744. <img
  745. src="../../assets/icon/checkNo.png"
  746. alt
  747. v-if="itemTool.tool != 1"
  748. />
  749. <img src="../../assets/icon/checkedIs.png" alt v-else />
  750. </div>
  751. </div>
  752. <div class="tool">
  753. <div
  754. class="whiteBIcon"
  755. @click="addTools(2, itemTaskIndex, toolIndex)"
  756. >
  757. <img src="../../assets/icon/secondToolList/note.png" alt />
  758. <div style="margin: 5px 0">便签</div>
  759. </div>
  760. <div class="check" @click="addTools(2, itemTaskIndex, toolIndex)">
  761. <img
  762. src="../../assets/icon/checkNo.png"
  763. alt
  764. v-if="itemTool.tool != 2"
  765. />
  766. <img src="../../assets/icon/checkedIs.png" alt v-else />
  767. </div>
  768. </div>
  769. <div class="tool">
  770. <div
  771. class="whiteBIcon"
  772. @click="addTools(6, itemTaskIndex, toolIndex)"
  773. >
  774. <img src="../../assets/icon/secondToolList/doc.png" alt />
  775. <div style="margin: 5px 0">协同文档</div>
  776. </div>
  777. <div class="check" @click="addTools(6, itemTaskIndex, toolIndex)">
  778. <img
  779. src="../../assets/icon/checkNo.png"
  780. alt
  781. v-if="itemTool.tool != 6"
  782. />
  783. <img src="../../assets/icon/checkedIs.png" alt v-else />
  784. </div>
  785. </div>
  786. <div class="tool">
  787. <div
  788. class="whiteBIcon"
  789. @click="addTools(3, itemTaskIndex, toolIndex)"
  790. >
  791. <img src="../../assets/icon/secondToolList/mindMapping.png" alt />
  792. <div style="margin: 5px 0">思维导图</div>
  793. </div>
  794. <div class="check" @click="addTools(3, itemTaskIndex, toolIndex)">
  795. <img
  796. src="../../assets/icon/checkNo.png"
  797. alt
  798. v-if="itemTool.tool != 3"
  799. />
  800. <img src="../../assets/icon/checkedIs.png" alt v-else />
  801. </div>
  802. </div>
  803. </div>
  804. <div class="toolSort" v-if="itemTool.toolType == 2">
  805. <div class="tool">
  806. <div
  807. class="whiteBIcon"
  808. @click="addTools(5, itemTaskIndex, toolIndex)"
  809. >
  810. <img src="../../assets/icon/thirdToolList/score.png" alt />
  811. <div style="margin: 5px 0">量规评分</div>
  812. </div>
  813. <div class="check" @click="addTools(5, itemTaskIndex, toolIndex)">
  814. <img
  815. src="../../assets/icon/checkNo.png"
  816. alt
  817. v-if="itemTool.tool != 5"
  818. />
  819. <img src="../../assets/icon/checkedIs.png" alt v-else />
  820. </div>
  821. </div>
  822. <div class="tool">
  823. <div class="whiteBIcon" @click="openTools(itemTaskIndex,4,toolIndex)">
  824. <img src="../../assets/icon/thirdToolList/ask.png" alt />
  825. <div style="margin: 5px 0">问卷调查</div>
  826. </div>
  827. <div class="check" @click="addTools(4, itemTaskIndex, toolIndex)">
  828. <img
  829. src="../../assets/icon/checkNo.png"
  830. alt
  831. v-if="itemTool.tool != 4"
  832. />
  833. <img src="../../assets/icon/checkedIs.png" alt v-else />
  834. </div>
  835. </div>
  836. </div>
  837. </div>
  838. <div>
  839. <input
  840. type="text"
  841. placeholder="添加工具描述"
  842. class="binfo_input"
  843. style="margin: 20px 0; width: 71.5% !important"
  844. v-model="itemTool.toolDetail"
  845. />
  846. </div>
  847. </div>
  848. <div class="addToolFun" @click="addToolFun(itemTaskIndex)">
  849. <div class="addToolImg">
  850. <img src="../../assets/icon/add.png" alt />
  851. </div>
  852. <div>添加工具</div>
  853. </div>
  854. </div>
  855. </div>
  856. <el-switch
  857. v-model="
  858. unitJson[unitIndex].chapterInfo[0].taskJson[taskCount]
  859. .isShowTools
  860. "
  861. active-text="是否开启评价"
  862. style="margin: 30px 0px 10px 0; padding-bottom: 30px"
  863. ></el-switch>
  864. <div class="funBlock" style="padding: 0">
  865. <div class="fold">
  866. <div @click="fold(itemTaskIndex, $event, 1)">折叠</div>
  867. <div class="arrow">
  868. <img src="../../assets/icon/fold.png" alt />
  869. </div>
  870. </div>
  871. <div class="fold">
  872. <div @click="fold(itemTaskIndex, $event, 0)">展开</div>
  873. <div class="arrow">
  874. <img src="../../assets/icon/expand.png" alt />
  875. </div>
  876. </div>
  877. </div>
  878. </div>
  879. <div class="addTaskBorder" @click="addTaskBorder">
  880. <div>
  881. <img src="../../assets/icon/addHw.png" alt />
  882. </div>
  883. </div>
  884. </div>
  885. </div>
  886. </div>
  887. <div
  888. style="
  889. width: calc(100% - 17% - 25px);
  890. background: #fff;
  891. border-radius: 10px;
  892. min-height: 550px;
  893. min-width: 800px;
  894. "
  895. v-if="this.steps == 4"
  896. >
  897. <div class="basic_box_success">
  898. <div class="right_img">
  899. <img src="../../assets/icon/right.png" alt />
  900. </div>
  901. <div style="font-weight: bold">成功</div>
  902. <div>您的课程编号</div>
  903. <div class="number">{{ number }}</div>
  904. <div class="success_button">
  905. <div class="look_course" @click="dialogVisible4 = true">邀请老师协同编辑</div>
  906. <div class="attend_others" @click="goCourse">预览课程</div>
  907. </div>
  908. </div>
  909. </div>
  910. </div>
  911. <!-- <div class="line"></div> -->
  912. <div class="info_btnBox">
  913. <button
  914. class="info_btn"
  915. v-if="steps == 1"
  916. @click="goTo('/course?userid=' + userid + '&oid=' + oid)"
  917. >返回课程</button>
  918. <button
  919. class="info_btn"
  920. v-if="steps > 1 && steps != 5"
  921. @click="lastSteps"
  922. >{{ steps == 4 ? "返回首页" : "上一步" }}</button>
  923. <button
  924. class="info_btn"
  925. v-if="steps < 5"
  926. @click="nextSteps"
  927. >{{ steps == 3 ? "确认上传" : "下一步" }}</button>
  928. </div>
  929. </div>
  930. </div>
  931. <el-dialog
  932. title="提示"
  933. :visible.sync="dialogVisible"
  934. :append-to-body="true"
  935. width="25%"
  936. :before-close="handleClose"
  937. class="dialog_diy2 customWidth"
  938. >
  939. <div>请复制该链接邀请协同编辑</div>
  940. <div>http://www.boomyon.com/index-zhang.com</div>
  941. <span slot="footer" class="dialog-footer">
  942. <el-button type="primary">复制链接分享</el-button>
  943. <el-button @click="dialogVisible = false">取消</el-button>
  944. </span>
  945. </el-dialog>
  946. <el-dialog
  947. :title="updateBoolean2 ? '查看文档' : '添加文档'"
  948. :visible.sync="dialogVisible1"
  949. :append-to-body="true"
  950. width="25%"
  951. :before-close="handleClose"
  952. class="dialog_diy2 customWidth"
  953. >
  954. <el-form>
  955. <el-form-item label="文档标题">
  956. <el-input v-model="tTitle" auto-complete="off" placeholder="请输入文档标题名..."></el-input>
  957. </el-form-item>
  958. <div>文档简介</div>
  959. <editor-bar v-model="tdetail" @change="change"></editor-bar>
  960. </el-form>
  961. <span slot="footer" class="dialog-footer">
  962. <el-button @click="dialogVisible1 = false">取 消</el-button>
  963. <el-button type="primary" @click="addWord" v-if="!updateBoolean2">添加</el-button>
  964. <el-button type="primary" @click="upWord" v-else>修 改</el-button>
  965. </span>
  966. </el-dialog>
  967. <el-dialog
  968. title="添加文档"
  969. :visible.sync="dialogVisible2"
  970. :append-to-body="true"
  971. width="500px"
  972. :before-close="handleClose"
  973. class="dialog_diy"
  974. >
  975. <el-form>
  976. <el-form-item label="文档标题">
  977. <el-input v-model="templateC.title" auto-complete="off" placeholder="请输入文档标题名..."></el-input>
  978. </el-form-item>
  979. <div>文档内容</div>
  980. <editor-bar v-model="cTemplate" @change="change"></editor-bar>
  981. </el-form>
  982. <span slot="footer" class="dialog-footer">
  983. <el-button @click="clearChoose">取 消</el-button>
  984. <el-button type="primary" @click="wordNext()">确定</el-button>
  985. </span>
  986. </el-dialog>
  987. <el-dialog
  988. title="添加附文本"
  989. :visible.sync="dialogVisible6"
  990. :append-to-body="true"
  991. width="500px"
  992. :before-close="handleClose"
  993. class="dialog_diy"
  994. >
  995. <el-form>
  996. <el-form-item label="文本标题">
  997. <el-input v-model="AttText.title" auto-complete="off" placeholder="请输入文本标题..."></el-input>
  998. </el-form-item>
  999. <div>附文本内容</div>
  1000. <editor-bar v-model="AttText.text" @change="change"></editor-bar>
  1001. </el-form>
  1002. <span slot="footer" class="dialog-footer">
  1003. <el-button @click="clearAttText">取 消</el-button>
  1004. <el-button type="primary" @click="isAddOrUpdateAttText">确定</el-button>
  1005. </span>
  1006. </el-dialog>
  1007. <el-dialog
  1008. title="添加项目成员"
  1009. :visible.sync="dialogVisible3"
  1010. :append-to-body="true"
  1011. width="25%"
  1012. height="80%"
  1013. :before-close="handleClose"
  1014. class="addNewPP customWidth"
  1015. >
  1016. <div class="people">
  1017. <div class="people_top">
  1018. <div class="people_nav">选择成员</div>
  1019. <div class="people_top_right">
  1020. <div class="people_search">
  1021. <el-input placeholder="搜索成员" v-model="searchPeople"></el-input>
  1022. <div class="search_img" @click="searchStudent">
  1023. <img src="../../assets/icon/search.png" alt />
  1024. </div>
  1025. </div>
  1026. </div>
  1027. </div>
  1028. <el-checkbox-group v-model="checkboxList" class="people_name">
  1029. <el-checkbox
  1030. v-for="item in studentJuri"
  1031. :key="item.userid"
  1032. :label="item.userid"
  1033. >{{ item.name ? item.name : "暂无学生可选" }}</el-checkbox>
  1034. </el-checkbox-group>
  1035. </div>
  1036. <span slot="footer" class="dialog-footer">
  1037. <el-button @click="dialogVisible3 = false">取 消</el-button>
  1038. <el-button type="primary" @click="isAddPP">确定</el-button>
  1039. </span>
  1040. </el-dialog>
  1041. <el-dialog
  1042. title="创建问卷调查"
  1043. :visible.sync="dialogVisible5"
  1044. :append-to-body="true"
  1045. width="800px"
  1046. :before-close="handleClose"
  1047. class="dialog_diy"
  1048. >
  1049. <!-- v-for="(item, index) in unitJson[unitIndex].chapterInfo[0].taskJson[taskCount].toolChoose"
  1050. :key="index"-->
  1051. <div>
  1052. <div
  1053. class="a_add_title"
  1054. style="
  1055. display: flex;
  1056. flex-direction: row;
  1057. align-items: center;
  1058. justify-content: center;
  1059. "
  1060. >
  1061. <div style="margin-right: 20px; font-size: 20px">问卷标题:</div>
  1062. <el-input v-model="askJson.askTitle" placeholder="请输入问卷标题" style="width: 400px"></el-input>
  1063. </div>
  1064. <div class="a_addBox">
  1065. <div style="font-size: 16px; color: #c7c7c7">请输入问卷内容</div>
  1066. <div class="a_add_box" v-for="(item1, index1) in askJson.askCount" :key="index1">
  1067. <div class="a_add_head">
  1068. <div>
  1069. {{ index1 + 1 + "、" }}
  1070. <el-input
  1071. class="a_add_head_input"
  1072. v-model="askJson.askJson[index1].askstitle"
  1073. placeholder="请输入问卷题目..."
  1074. ></el-input>
  1075. </div>
  1076. <div class="a_add_head_div">
  1077. <el-button type="primary" size="small" @click="addAskList()">添加</el-button>
  1078. <el-button
  1079. type="primary"
  1080. size="small"
  1081. @click="deleteAskList()"
  1082. v-if="index1 != 0"
  1083. >删除</el-button>
  1084. </div>
  1085. </div>
  1086. <div class="a_add_body">
  1087. <div class="a_add_input">
  1088. <el-input
  1089. v-for="(item2, checkIndex) in askJson.askJson[index1].askItem"
  1090. :key="checkIndex"
  1091. v-model="askJson.askJson[index1].checkList[checkIndex]"
  1092. placeholder="请输入选项..."
  1093. style="width: 150px; margin: 10px 10px 0 0"
  1094. ></el-input>
  1095. </div>
  1096. <div class="a_add_body_div">
  1097. <el-button
  1098. style="margin: 10px 0px 0 0"
  1099. type="primary"
  1100. size="small"
  1101. @click="addcheckList(askJson.askJson[index1])"
  1102. v-if="askJson.askJson[index1].askItem < 4"
  1103. >添加</el-button>
  1104. <el-button
  1105. type="primary"
  1106. size="small"
  1107. style="margin: 10px 0 0 0"
  1108. @click="deletecheckList(askJson.askJson[index1])"
  1109. v-if="askJson.askJson[index1].askItem != 1"
  1110. >删除</el-button>
  1111. </div>
  1112. </div>
  1113. </div>
  1114. </div>
  1115. </div>
  1116. <span slot="footer" class="dialog-footer">
  1117. <el-button @click="dialogVisible5 = false">取 消</el-button>
  1118. <el-button type="primary" @click="addAsk">确 定</el-button>
  1119. </span>
  1120. </el-dialog>
  1121. <el-dialog
  1122. title="提示"
  1123. :visible.sync="dialogVisible4"
  1124. :append-to-body="true"
  1125. width="800px"
  1126. :before-close="handleClose"
  1127. class="dialog_diy notice"
  1128. >
  1129. <div>此功能暂未开放!</div>
  1130. <el-button type="primary" @click="dialogVisible4 = false">确定</el-button>
  1131. </el-dialog>
  1132. </div>
  1133. </template>
  1134. <script>
  1135. import "../../common/aws-sdk-2.235.1.min.js";
  1136. import $ from "jquery";
  1137. import EditorBar from "../../components/tools/wangEnduit";
  1138. export default {
  1139. components: { EditorBar },
  1140. data() {
  1141. return {
  1142. checkAll: false,
  1143. checkedCities: [],
  1144. isIndeterminate: true,
  1145. steps: 1,
  1146. nbOrder: 0,
  1147. courseId: "",
  1148. courseName: "",
  1149. isTeacherSee: false,
  1150. courseText: "",
  1151. formLabelWidth: "100px",
  1152. uploadLoading1: false,
  1153. noneBtnImg: false,
  1154. updateBoolean2: false,
  1155. unitIndex: 0,
  1156. taskCount: 0,
  1157. dialogVisible: false,
  1158. dialogVisible1: false,
  1159. dialogVisible2: false,
  1160. dialogVisible3: false,
  1161. dialogVisible4: false,
  1162. dialogVisible5: false,
  1163. dialogVisible6: false,
  1164. publicTool: 0,
  1165. searchPeople: "",
  1166. userid: this.$route.query.userid,
  1167. oid: this.$route.query.oid,
  1168. cid: this.$route.query.cid != "" ? this.$route.query.cid : "",
  1169. cover: [], //课程封面
  1170. myWord: [],
  1171. askJson: {
  1172. askCount: 1,
  1173. askTitle: "",
  1174. askJson: [{ askstitle: "", askItem: 1, checkList: [] }],
  1175. },
  1176. unitJson: [
  1177. {
  1178. dyName: "", //单元标题
  1179. // dyText: "",
  1180. // startTime: "", //开始时间
  1181. // endTime: "", //结束时间
  1182. // isTalk: false, //是否开启评价
  1183. chapterInfo: [
  1184. {
  1185. isread: false,
  1186. chapterid: this.guid(),
  1187. title: "",
  1188. courseName: "",
  1189. taskJson: [
  1190. {
  1191. task: "",
  1192. taskDetail: "",
  1193. chapterData: [],
  1194. toolText: "",
  1195. toolChoose: [
  1196. {
  1197. tool: null,
  1198. toolDetail: "",
  1199. toolType: 0,
  1200. askCount: 1,
  1201. askTitle: "",
  1202. askJson: [{ askstitle: "", askItem: 1, checkList: [] }],
  1203. },
  1204. ],
  1205. isShowTools: false,
  1206. askCount: 1,
  1207. isFold: 0,
  1208. askTitle: "",
  1209. askJson: [{ askstitle: "", askItem: 1, checkList: [] }],
  1210. checkJson: [{ checkCount: [], checkPerent: [] }],
  1211. homeworkList: [],
  1212. },
  1213. ],
  1214. itemCount: 1,
  1215. // question: "",
  1216. fileList1: [],
  1217. video: [],
  1218. testData: [],
  1219. pData: [],
  1220. templateArray: [],
  1221. },
  1222. ],
  1223. },
  1224. ],
  1225. studentJuri: [],
  1226. checkboxList: [],
  1227. number: "",
  1228. tTitle: "",
  1229. tdetail: "",
  1230. templateC: {},
  1231. AttText: {},
  1232. AttTextType: 0,
  1233. AttTextIndex: 0,
  1234. cTemplate: "",
  1235. CourseType: [],
  1236. CourseTypeJson: {},
  1237. courseTypeId: [],
  1238. courseTypeSon: [],
  1239. clearArray: [],
  1240. loading: false,
  1241. toolType: 0,
  1242. inputShow: true,
  1243. toolIndex: 0,
  1244. };
  1245. },
  1246. computed: {
  1247. offsetLetfPx: function () {
  1248. //addnum可以直接在模板语法里面用,相当于data内的值
  1249. return (
  1250. $(".cru_select")[this.unitIndex] &&
  1251. $(".cru_select")[this.unitIndex].offsetLeft
  1252. );
  1253. },
  1254. },
  1255. methods: {
  1256. handleCheckAllChange(val) {
  1257. this.checkedCities = val ? cityOptions : [];
  1258. this.isIndeterminate = false;
  1259. },
  1260. handleCheckedCitiesChange(value) {
  1261. let checkedCount = value.length;
  1262. this.checkAll = checkedCount === this.cities.length;
  1263. this.isIndeterminate =
  1264. checkedCount > 0 && checkedCount < this.cities.length;
  1265. },
  1266. addHw(e) {
  1267. var el = e.currentTarget;
  1268. el.getElementsByTagName("input")[0].click();
  1269. },
  1270. change(val) {
  1271. console.log(val);
  1272. },
  1273. handleClose(done) {
  1274. done();
  1275. },
  1276. imgChange1(file, fileList, type, itemTaskIndex) {
  1277. if (type == 1) {
  1278. var _tmp = this.cover;
  1279. } else if (type == 2 || type == 3 || type == 6) {
  1280. var _tmp = this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  1281. itemTaskIndex
  1282. ].chapterData;
  1283. } else if (type == 4) {
  1284. var _tmp = this.unitJson[this.unitIndex].chapterInfo[0].fileList1;
  1285. } else {
  1286. var _tmp = this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  1287. itemTaskIndex
  1288. ].homeworkList;
  1289. }
  1290. this.noneBtnImg = _tmp.length >= 1;
  1291. },
  1292. goTo(path) {
  1293. this.$router.push(path);
  1294. },
  1295. guid() {
  1296. var _num,
  1297. i,
  1298. _guid = "";
  1299. for (i = 0; i < 32; i++) {
  1300. _guid += Math.floor(Math.random() * 16).toString(16); //随机0 - 16 的数字 转变为16进制的字符串
  1301. _num = Math.floor((i - 7) / 4); //计算 (i-7)除4
  1302. if (_num > -1 && _num < 4 && i == 7 + 4 * _num) {
  1303. //会使guid中间加 "-" 形式为xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
  1304. _guid += "-";
  1305. }
  1306. }
  1307. return _guid;
  1308. },
  1309. lastSteps() {
  1310. if (this.steps == 4) {
  1311. // window.location.href =
  1312. // "./course.vue?userid=" + this.userid + "&oid=" + this.oid;
  1313. this.goTo("/course?userid=" + this.userid + "&oid=" + this.oid);
  1314. } else {
  1315. this.steps--;
  1316. }
  1317. },
  1318. navSteps(s) {
  1319. if (s == 1) {
  1320. this.steps = 1;
  1321. }
  1322. if (s == 2) {
  1323. this.steps = 2;
  1324. }
  1325. if (s == 3) {
  1326. this.cTemplate = this.templateC.content;
  1327. this.dialogVisible2 = false;
  1328. this.steps = 3;
  1329. }
  1330. },
  1331. nextSteps() {
  1332. if (this.steps == 1) {
  1333. if (
  1334. this.courseName != "" &&
  1335. this.courseText != "" &&
  1336. this.cover.length != 0
  1337. ) {
  1338. this.steps++;
  1339. } else {
  1340. this.$message.error("请将信息填写完整");
  1341. return;
  1342. }
  1343. } else if (this.steps == 2) {
  1344. if (this.templateC.id != "" || this.templateC.id != undefined) {
  1345. // this.$message.error("请选择文档");
  1346. // return;
  1347. this.cTemplate = this.templateC.content;
  1348. }
  1349. // this.cTemplate = this.templateC.content;
  1350. this.dialogVisible2 = false;
  1351. this.steps++;
  1352. } else if (this.steps == 3) {
  1353. if (this.cid == "" || this.cid == undefined) {
  1354. if (
  1355. this.courseName == "" ||
  1356. this.courseText == "" ||
  1357. this.cover.length == 0
  1358. ) {
  1359. this.$message.error("请将信息填写完整");
  1360. return;
  1361. } else {
  1362. this.addWork();
  1363. this.steps++;
  1364. }
  1365. } else {
  1366. if (
  1367. this.courseName == "" ||
  1368. this.courseText == "" ||
  1369. this.cover.length == 0
  1370. ) {
  1371. this.$message.error("请将信息填写完整");
  1372. return;
  1373. } else {
  1374. this.updateWork();
  1375. this.steps++;
  1376. }
  1377. }
  1378. }
  1379. },
  1380. unitSet(i) {
  1381. this.unitIndex = i;
  1382. },
  1383. time() {
  1384. if (!this.now) {
  1385. this.now = new Date().getTime();
  1386. return true;
  1387. } else {
  1388. let time = new Date().getTime();
  1389. if (time - this.now > 3000) {
  1390. this.now = time;
  1391. return true;
  1392. } else {
  1393. return false;
  1394. }
  1395. }
  1396. },
  1397. deleteUnit(i) {
  1398. var _this = this;
  1399. if (_this.time()) {
  1400. _this
  1401. .$confirm("确定删除此单元吗?", "提示", {
  1402. confirmButtonText: "确定",
  1403. cancelButtonText: "取消",
  1404. type: "warning",
  1405. })
  1406. .then(() => {
  1407. _this.unitJson.splice(i, 1);
  1408. // var a = 0;
  1409. // if (_this.unitIndex > 0) {
  1410. // a = _this.unitIndex - 1;
  1411. // }
  1412. this.unitIndex = this.unitIndex - 1;
  1413. _this.$message.success("删除成功");
  1414. })
  1415. .catch(() => {
  1416. return;
  1417. });
  1418. }
  1419. },
  1420. deleteTool(itemTaskIndex, i) {
  1421. var _this = this;
  1422. if (_this.time()) {
  1423. _this
  1424. .$confirm("确定删除此工具吗?", "提示", {
  1425. confirmButtonText: "确定",
  1426. cancelButtonText: "取消",
  1427. type: "warning",
  1428. })
  1429. .then(() => {
  1430. _this.unitJson[_this.unitIndex].chapterInfo[0].taskJson[
  1431. itemTaskIndex
  1432. ].toolChoose.splice(i, 1);
  1433. _this.$message.success("删除成功");
  1434. })
  1435. .catch(() => {
  1436. return;
  1437. });
  1438. }
  1439. },
  1440. handlePictureCardPreview(file) {
  1441. this.dialogImageUrl = file.url;
  1442. },
  1443. clean(i, c) {
  1444. this.unitJson[this.unitIndex].chapterInfo[i].fileList1.splice(c, 1);
  1445. },
  1446. handle_remove1(file, fileList, type) {
  1447. var _tmp = this.cover;
  1448. for (var i = 0, len = _tmp.length; i < len; i++) {
  1449. if (_tmp[i].uid == file.uid) {
  1450. _tmp.splice(i, 1);
  1451. break;
  1452. }
  1453. this.cover = _tmp;
  1454. }
  1455. this.noneBtnImg = _tmp.length >= 1;
  1456. },
  1457. addImg(e) {
  1458. var el = e.currentTarget;
  1459. el.getElementsByTagName("input")[0].click();
  1460. },
  1461. addAttText(i) {
  1462. this.AttText = {};
  1463. this.AttText.index = i;
  1464. this.AttTextType = 0;
  1465. this.dialogVisible6 = true;
  1466. },
  1467. beforeUpload1(event, type) {
  1468. const loading = this.openLoading();
  1469. var file = event.file;
  1470. var credentials = {
  1471. accessKeyId: "AKIATLPEDU37QV5CHLMH",
  1472. secretAccessKey: "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",
  1473. }; //秘钥形式的登录上传
  1474. window.AWS.config.update(credentials);
  1475. window.AWS.config.region = "cn-northwest-1"; //设置区域
  1476. var bucket = new window.AWS.S3({ params: { Bucket: "ccrb" } }); //选择桶
  1477. var _this = this;
  1478. if (file) {
  1479. var params = {
  1480. Key:
  1481. file.name.split(".")[0] +
  1482. new Date().getTime() +
  1483. "." +
  1484. file.name.split(".")[1],
  1485. ContentType: file.type,
  1486. Body: file,
  1487. "Access-Control-Allow-Credentials": "*",
  1488. ACL: "public-read",
  1489. }; //key可以设置为桶的相抵路径,Body为文件, ACL最好要设置
  1490. var options = {
  1491. partSize: 2048 * 1024 * 1024,
  1492. queueSize: 2,
  1493. leavePartsOnError: true,
  1494. };
  1495. bucket
  1496. .upload(params, options)
  1497. .on("httpUploadProgress", function (evt) {
  1498. //这里可以写进度条
  1499. // console.log("Uploaded : " + parseInt((evt.loaded * 80) / evt.total) + '%');
  1500. })
  1501. .send(function (err, data) {
  1502. loading.close();
  1503. if (err) {
  1504. var a = _this.$refs.upload1.uploadFiles;
  1505. a.splice(a.length - 1, a.length);
  1506. _this.$message.error("上传失败");
  1507. } else {
  1508. _this.cover.push({
  1509. name: file.name,
  1510. url: data.Location,
  1511. uid: file.uid,
  1512. });
  1513. _this.imgChange1(null, null, 1, null);
  1514. console.log(data.Location);
  1515. }
  1516. });
  1517. }
  1518. },
  1519. beforeUpload(data) {
  1520. this.$refs.upload1.uploadFiles;
  1521. this.uploadLoading1 = true;
  1522. var file = data.file;
  1523. var credentials = {
  1524. accessKeyId: "AKIATLPEDU37QV5CHLMH",
  1525. secretAccessKey: "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",
  1526. }; //秘钥形式的登录上传
  1527. window.AWS.config.update(credentials);
  1528. window.AWS.config.region = "cn-northwest-1"; //设置区域
  1529. var bucket = new window.AWS.S3({ params: { Bucket: "ccrb" } }); //选择桶
  1530. var _this = this;
  1531. if (file) {
  1532. var params = {
  1533. Key:
  1534. file.name.split(".")[0] +
  1535. new Date().getTime() +
  1536. "." +
  1537. file.name.split(".")[1],
  1538. ContentType: file.type,
  1539. Body: file,
  1540. "Access-Control-Allow-Credentials": "*",
  1541. ACL: "public-read",
  1542. }; //key可以设置为桶的相抵路径,Body为文件, ACL最好要设置
  1543. var options = {
  1544. partSize: 2048 * 1024 * 1024,
  1545. queueSize: 2,
  1546. leavePartsOnError: true,
  1547. };
  1548. bucket
  1549. .upload(params, options)
  1550. .on("httpUploadProgress", function (evt) {
  1551. //这里可以写进度条
  1552. // console.log("Uploaded : " + parseInt((evt.loaded * 80) / evt.total) + '%');
  1553. })
  1554. .send(function (err, data) {
  1555. _this.uploadLoading1 = false;
  1556. if (err) {
  1557. var a = _this.$refs.upload1.uploadFiles;
  1558. a.splice(a.length - 1, a.length);
  1559. _this.$message.error("上传失败");
  1560. } else {
  1561. //上传成功处理
  1562. _this.unitJson[_this.unitIndex].chapterInfo[0].fileList1.push({
  1563. name: file.name,
  1564. url: data.Location,
  1565. uid: file.uid,
  1566. });
  1567. _this.imgChange();
  1568. console.log(data.Location);
  1569. }
  1570. });
  1571. }
  1572. },
  1573. onExceed() {
  1574. this.$message.error("课程封面仅支持上传一张,请删除后再进行上传");
  1575. },
  1576. beforeUpload2(event, unitIndex, type, itemTaskIndex) {
  1577. const loading = this.openLoading();
  1578. var file = event.target.files[0];
  1579. this.inputShow = false;
  1580. var credentials = {
  1581. accessKeyId: "AKIATLPEDU37QV5CHLMH",
  1582. secretAccessKey: "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",
  1583. }; //秘钥形式的登录上传
  1584. window.AWS.config.update(credentials);
  1585. window.AWS.config.region = "cn-northwest-1"; //设置区域
  1586. var bucket = new window.AWS.S3({ params: { Bucket: "ccrb" } }); //选择桶
  1587. var _this = this;
  1588. if (file) {
  1589. var params = {
  1590. Key:
  1591. file.name.split(".")[0] +
  1592. new Date().getTime() +
  1593. "." +
  1594. file.name.split(".")[1],
  1595. ContentType: file.type,
  1596. Body: file,
  1597. "Access-Control-Allow-Credentials": "*",
  1598. ACL: "public-read",
  1599. }; //key可以设置为桶的相抵路径,Body为文件, ACL最好要设置
  1600. var options = {
  1601. partSize: 2048 * 1024 * 1024,
  1602. queueSize: 2,
  1603. leavePartsOnError: true,
  1604. };
  1605. bucket
  1606. .upload(params, options)
  1607. .on("httpUploadProgress", function (evt) {
  1608. //这里可以写进度条
  1609. // console.log("Uploaded : " + parseInt((evt.loaded * 80) / evt.total) + '%');
  1610. })
  1611. .send(function (err, data) {
  1612. loading.close();
  1613. _this.inputShow = true;
  1614. if (err) {
  1615. var a = _this.$refs.upload1.uploadFiles;
  1616. a.splice(a.length - 1, a.length);
  1617. _this.$message.error("上传失败");
  1618. } else {
  1619. if (type == 2 || type == 3) {
  1620. _this.unitJson[unitIndex].chapterInfo[0].taskJson[
  1621. itemTaskIndex
  1622. ].chapterData.push({
  1623. name: file.name,
  1624. url: data.Location,
  1625. uid: file.uid,
  1626. type: type,
  1627. });
  1628. _this.imgChange1(null, null, type, itemTaskIndex);
  1629. } else if (type == 4) {
  1630. _this.unitJson[_this.unitIndex].chapterInfo[0].taskJson[
  1631. itemTaskIndex
  1632. ].fileList1.push({
  1633. name: file.name,
  1634. url: data.Location,
  1635. uid: file.uid,
  1636. });
  1637. _this.imgChange1(null, null, type, itemTaskIndex);
  1638. } else if (type == 5) {
  1639. _this.unitJson[_this.unitIndex].chapterInfo[0].taskJson[
  1640. itemTaskIndex
  1641. ].homeworkList.push({
  1642. name: file.name,
  1643. url: data.Location,
  1644. uid: file.uid,
  1645. });
  1646. _this.imgChange1(null, null, type, itemTaskIndex);
  1647. }
  1648. console.log(data.Location);
  1649. }
  1650. });
  1651. }
  1652. },
  1653. addunit() {
  1654. this.unitJson.push({
  1655. dyName: "", //单元标题
  1656. // dyText: "",
  1657. // startTime: "", //开始时间
  1658. // endTime: "", //结束时间
  1659. // isTalk: false, //是否开启评价
  1660. chapterInfo: [
  1661. {
  1662. isread: false,
  1663. chapterid: this.guid(),
  1664. title: "",
  1665. courseName: "",
  1666. taskJson: [
  1667. {
  1668. task: "",
  1669. taskDetail: "",
  1670. chapterData: [],
  1671. toolText: "",
  1672. toolChoose: [
  1673. {
  1674. tool: null,
  1675. toolDetail: "",
  1676. toolType: 0,
  1677. askCount: 1,
  1678. askTitle: "",
  1679. askJson: [{ askstitle: "", askItem: 1, checkList: [] }],
  1680. },
  1681. ],
  1682. isShowTools: false,
  1683. askCount: 1,
  1684. isFold: 0,
  1685. askTitle: "",
  1686. askJson: [{ askstitle: "", askItem: 1, checkList: [] }],
  1687. checkJson: [{ checkCount: [], checkPerent: [] }],
  1688. homeworkList: [],
  1689. },
  1690. ],
  1691. itemCount: 1,
  1692. // question: "",
  1693. fileList1: [],
  1694. video: [],
  1695. testData: [],
  1696. pData: [],
  1697. templateArray: [],
  1698. },
  1699. ],
  1700. });
  1701. setTimeout(() => {
  1702. this.unitIndex = this.unitJson.length - 1;
  1703. this.unitSet(this.unitIndex);
  1704. }, 0);
  1705. },
  1706. addToolFun(itemTaskIndex) {
  1707. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  1708. itemTaskIndex
  1709. ].toolChoose.push({
  1710. tool: null,
  1711. toolDetail: "",
  1712. toolType: 0,
  1713. askCount: 1,
  1714. askTitle: "",
  1715. askJson: [{ askstitle: "", askItem: 1, checkList: [] }],
  1716. });
  1717. },
  1718. addTaskBorder() {
  1719. this.unitJson[this.unitIndex].chapterInfo[0].taskJson.push({
  1720. task: "",
  1721. taskDetail: "",
  1722. chapterData: [],
  1723. toolText: "",
  1724. toolChoose: [
  1725. {
  1726. tool: null,
  1727. toolDetail: "",
  1728. toolType: 0,
  1729. askCount: 1,
  1730. askTitle: "",
  1731. askJson: [{ askstitle: "", askItem: 1, checkList: [] }],
  1732. },
  1733. ],
  1734. isShowTools: false,
  1735. askCount: 1,
  1736. isFold: 0,
  1737. askTitle: "",
  1738. askJson: [{ askstitle: "", askItem: 1, checkList: [] }],
  1739. checkJson: [{ checkCount: [], checkPerent: [] }],
  1740. homeworkList: [],
  1741. });
  1742. },
  1743. add(e, i) {
  1744. var el = e.currentTarget;
  1745. el.getElementsByTagName("input")[0].click();
  1746. },
  1747. fold(i, e, type) {
  1748. var a = e.path[3];
  1749. var b = e.path[2];
  1750. if (type == 1) {
  1751. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[i].isFold = 1;
  1752. a.className += " smallTaskBorder";
  1753. b.className += " funBlockTop";
  1754. } else {
  1755. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[i].isFold = 0;
  1756. a.className = "taskBorder";
  1757. b.className = "funBlock";
  1758. }
  1759. console.log(e);
  1760. },
  1761. deleteHomeworkBox(unitIndex, index, i) {
  1762. this.unitJson[unitIndex].chapterInfo[index].taskJson[
  1763. this.taskCount
  1764. ].homeworkList.splice(i, 1);
  1765. },
  1766. getStudent() {
  1767. let params = {
  1768. cn: this.searchPeople,
  1769. oid: this.oid,
  1770. uid: this.userid,
  1771. };
  1772. this.ajax
  1773. .get(this.$store.state.api + "selectProjectStudent", params)
  1774. .then((res) => {
  1775. this.studentJuri = res.data[0];
  1776. })
  1777. .catch((err) => {});
  1778. },
  1779. searchStudent() {
  1780. this.getStudent();
  1781. },
  1782. getChapterData(e, i, j, ic, type) {
  1783. e.stopPropagation();
  1784. this.updataC = true;
  1785. this.icc = ic;
  1786. if ((type == 2 || type == 3) && e.target.tagName !== "INPUT") {
  1787. console.log("还不能下载图片喔");
  1788. }
  1789. },
  1790. deleteChapterData(e, i, j, ic) {
  1791. // window.U.UF.EV.stopBubble();
  1792. e.stopPropagation();
  1793. this.unitJson[i].chapterInfo[j].taskJson[
  1794. this.taskCount
  1795. ].chapterData.splice(ic, 1);
  1796. },
  1797. updataVideoT(e, i, j, ic) {
  1798. e.stopPropagation();
  1799. this.unitJson[i].chapterInfo[j].taskJson[this.taskCount].chapterData[
  1800. ic
  1801. ].name = e.target.value;
  1802. },
  1803. upCd(e, i, j, ic) {
  1804. e.stopPropagation();
  1805. if (ic == 0) {
  1806. return;
  1807. }
  1808. var a = this.unitJson[i].chapterInfo[j].taskJson[this.taskCount]
  1809. .chapterData[ic - 1];
  1810. this.unitJson[i].chapterInfo[j].taskJson[this.taskCount].chapterData[
  1811. ic - 1
  1812. ] = this.unitJson[i].chapterInfo[j].taskJson[this.taskCount].chapterData[
  1813. ic
  1814. ];
  1815. this.unitJson[i].chapterInfo[j].taskJson[this.taskCount].chapterData[
  1816. ic
  1817. ] = a;
  1818. },
  1819. downCd(e, i, j, ic) {
  1820. e.stopPropagation();
  1821. if (ic == this.unitJson[i].chapterInfo[j].chapterData.length - 1) {
  1822. return;
  1823. }
  1824. var a = this.unitJson[i].chapterInfo[j].taskJson[this.taskCount]
  1825. .chapterData[ic + 1];
  1826. this.unitJson[i].chapterInfo[j].taskJson[this.taskCount].chapterData[
  1827. ic + 1
  1828. ] = this.unitJson[i].chapterInfo[j].taskJson[this.taskCount].chapterData[
  1829. ic
  1830. ];
  1831. this.unitJson[i].chapterInfo[j].taskJson[this.taskCount].chapterData[
  1832. ic
  1833. ] = a;
  1834. },
  1835. addWork() {
  1836. let params = [
  1837. {
  1838. uid: this.userid,
  1839. title: this.courseName,
  1840. brief: this.courseText.replace(/%/g, "%25"),
  1841. cover: this.cover.length > 0 ? JSON.stringify(this.cover) : "",
  1842. astudent:
  1843. this.checkboxList.length > 0
  1844. ? JSON.stringify(this.checkboxList)
  1845. : "",
  1846. see: this.isTeacherSee == true ? 0 : 1,
  1847. chapters: JSON.stringify(this.unitJson),
  1848. template: this.cTemplate,
  1849. courseType: JSON.stringify(this.courseTypeId),
  1850. },
  1851. ];
  1852. this.ajax
  1853. // .post(this.$store.state.api + "addWork", params)
  1854. .post(this.$store.state.api + "addWorkNew", params)
  1855. .then((res) => {
  1856. this.$message({
  1857. message: "新增成功",
  1858. type: "success",
  1859. });
  1860. this.number = res.data.ordernumber;
  1861. this.courseId = res.data.courseId;
  1862. this.islogin = true;
  1863. })
  1864. .catch((err) => {
  1865. this.$message.error("新增失败");
  1866. console.error(err);
  1867. });
  1868. },
  1869. goCourse() {
  1870. window.parent.postMessage({ cid: this.courseId, type: "1" }, "*");
  1871. },
  1872. updateWork() {
  1873. let params = [
  1874. {
  1875. cid: this.cid,
  1876. title: this.courseName,
  1877. brief: this.courseText.replace(/%/g, "%25"),
  1878. cover: this.cover.length > 0 ? JSON.stringify(this.cover) : "",
  1879. astudent:
  1880. this.checkboxList.length > 0
  1881. ? JSON.stringify(this.checkboxList)
  1882. : "",
  1883. see: this.isTeacherSee == true ? 0 : 1,
  1884. chapters: JSON.stringify(this.unitJson),
  1885. template: this.myWord,
  1886. uid: this.userid,
  1887. courseType: JSON.stringify(this.courseTypeId),
  1888. },
  1889. ];
  1890. this.ajax
  1891. .post(this.$store.state.api + "updateWorkNew", params)
  1892. .then((res) => {
  1893. this.$message({
  1894. message: "修改成功",
  1895. type: "success",
  1896. });
  1897. this.number = this.nbOrder;
  1898. })
  1899. .catch((err) => {
  1900. this.$message.error("修改失败");
  1901. console.error(err);
  1902. });
  1903. },
  1904. guid() {
  1905. var _num,
  1906. i,
  1907. _guid = "";
  1908. for (i = 0; i < 32; i++) {
  1909. _guid += Math.floor(Math.random() * 16).toString(16); //随机0 - 16 的数字 转变为16进制的字符串
  1910. _num = Math.floor((i - 7) / 4); //计算 (i-7)除4
  1911. if (_num > -1 && _num < 4 && i == 7 + 4 * _num) {
  1912. //会使guid中间加 "-" 形式为xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
  1913. _guid += "-";
  1914. }
  1915. }
  1916. return _guid;
  1917. },
  1918. insertWord() {
  1919. this.dialogVisible1 = true;
  1920. this.updateBoolean2 = false;
  1921. this.tTitle = "";
  1922. this.tdetail = "";
  1923. },
  1924. addWord() {
  1925. this.unitJson[this.unitIndex].chapterInfo[0].fileList1.push({
  1926. name: this.tTitle,
  1927. content: this.tdetail,
  1928. uid: this.guid(),
  1929. });
  1930. this.dialogVisible1 = false;
  1931. },
  1932. upWord() {},
  1933. selectWord(uid, i, c) {
  1934. this.dialogVisible1 = true;
  1935. this.updateBoolean2 = true;
  1936. if (
  1937. uid == this.unitJson[this.unitIndex].chapterInfo[i].fileList1[c].uid
  1938. ) {
  1939. this.tTitle = this.unitJson[this.unitIndex].chapterInfo[i].fileList1[
  1940. c
  1941. ].name;
  1942. this.tdetail = this.unitJson[this.unitIndex].chapterInfo[i].fileList1[
  1943. c
  1944. ].content;
  1945. }
  1946. },
  1947. isAddPP() {
  1948. if (this.checkboxList.length > 0) {
  1949. this.$message({
  1950. message: "添加成功",
  1951. type: "success",
  1952. });
  1953. this.dialogVisible3 = false;
  1954. } else {
  1955. this.$message({
  1956. message: "请添加项目成员",
  1957. type: "error",
  1958. });
  1959. }
  1960. },
  1961. getTemplate() {
  1962. this.ajax
  1963. .get(this.$store.state.api + "getTemplateT", "")
  1964. .then((res) => {
  1965. this.templateArray = res.data[0];
  1966. })
  1967. .catch((err) => {});
  1968. },
  1969. clearChoose() {
  1970. this.clearArray.splice(this.templateC.id, 1);
  1971. this.dialogVisible2 = false;
  1972. },
  1973. clearAttText() {
  1974. this.AttText = {};
  1975. this.dialogVisible6 = false;
  1976. },
  1977. checkTemplate(res) {
  1978. this.clearArray.push(res.id);
  1979. this.templateC = res;
  1980. this.cTemplate = res.content;
  1981. this.dialogVisible2 = true;
  1982. },
  1983. checkTemplate1(w) {
  1984. this.clearArray.splice(0, this.clearArray.length);
  1985. this.templateC.title = "我的文档";
  1986. this.cTemplate = w != "undefined" ? w : "";
  1987. this.dialogVisible2 = true;
  1988. },
  1989. wordNext() {
  1990. // this.cTemplate = this.templateC.content;
  1991. // this.steps++;
  1992. this.dialogVisible2 = false;
  1993. },
  1994. isAddOrUpdateAttText() {
  1995. if (this.AttTextType == 0) {
  1996. this.addAttTextMessage();
  1997. } else {
  1998. this.updateAttText();
  1999. }
  2000. },
  2001. addAttTextMessage() {
  2002. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  2003. this.AttText.index
  2004. ].chapterData.push({
  2005. name: this.AttText.title,
  2006. url: this.AttText.text,
  2007. type: 6,
  2008. });
  2009. this.imgChange1(null, null, 6, this.AttText.index);
  2010. this.dialogVisible6 = false;
  2011. },
  2012. selectAttText(i) {
  2013. this.dialogVisible6 = true;
  2014. this.AttText.title = this.unitJson[
  2015. this.unitIndex
  2016. ].chapterInfo[0].taskJson[this.AttText.index].chapterData[i].name;
  2017. this.AttText.text = this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  2018. this.AttText.index
  2019. ].chapterData[i].url;
  2020. this.AttTextIndex = i;
  2021. this.AttTextType = 1;
  2022. },
  2023. updateAttText() {
  2024. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  2025. this.AttText.index
  2026. ].chapterData[this.AttTextIndex].name = this.AttText.title;
  2027. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  2028. this.AttText.index
  2029. ].chapterData[this.AttTextIndex].url = this.AttText.text;
  2030. this.dialogVisible6 = false;
  2031. },
  2032. addPP() {
  2033. this.dialogVisible3 = true;
  2034. },
  2035. goTo(path) {
  2036. this.$router.push(path);
  2037. },
  2038. openTools(itemTaskIndex, i, toolIndex) {
  2039. // if (i == 1) {
  2040. // window.parent.postMessage({ tools: "1" }, "*");
  2041. // } else if (i == 2) {
  2042. // window.parent.postMessage({ tools: "2" }, "*");
  2043. // } else if (i == 3) {
  2044. // window.parent.postMessage({ tools: "3" }, "*");
  2045. // } else if (i == 4) {
  2046. // window.parent.postMessage({ tools: "4" }, "*");
  2047. // }
  2048. // // else if(i == 5){
  2049. // // window.parent.postMessage({ tools: "5" }, "*");
  2050. // // }
  2051. // else {
  2052. // window.parent.postMessage({ tools: "6" }, "*");
  2053. // }
  2054. if (i == 4) {
  2055. this.taskCount = itemTaskIndex;
  2056. this.toolIndex = toolIndex;
  2057. this.askJson = this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  2058. itemTaskIndex
  2059. ].toolChoose[toolIndex];
  2060. this.dialogVisible5 = true;
  2061. }
  2062. },
  2063. addTools(i, itemTaskIndex, toolIndex) {
  2064. if (
  2065. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  2066. .toolChoose[toolIndex].tool == null
  2067. ) {
  2068. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  2069. itemTaskIndex
  2070. ].toolChoose[toolIndex].tool = i;
  2071. } else {
  2072. if (
  2073. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  2074. .toolChoose[toolIndex].tool != null &&
  2075. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[itemTaskIndex]
  2076. .toolChoose[toolIndex].tool != i
  2077. ) {
  2078. this.$message({
  2079. message: "每个工具只能添加一个",
  2080. type: "error",
  2081. });
  2082. } else {
  2083. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  2084. itemTaskIndex
  2085. ].toolChoose[toolIndex].tool = null;
  2086. }
  2087. }
  2088. this.$forceUpdate();
  2089. },
  2090. // cleanAsk(p) {
  2091. // if (this.unitJson[this.unitIndex].chapterInfo[0].askCount == 1) {
  2092. // this.unitJson[this.unitIndex].chapterInfo[0].toolChoose.splice(
  2093. // this.unitJson[this.unitIndex].chapterInfo[0].toolChoose.indexOf(p),
  2094. // 1
  2095. // );
  2096. // this.unitJson[this.unitIndex].chapterInfo[0].askTitle = "";
  2097. // this.unitJson[this.unitIndex].chapterInfo[0].askJson = [];
  2098. // this.unitJson[this.unitIndex].chapterInfo[0].askJson.push({
  2099. // askstitle: "",
  2100. // askItem: 1,
  2101. // checkList: [],
  2102. // });
  2103. // this.dialogVisible5 = false;
  2104. // } else {
  2105. // this.dialogVisible5 = false;
  2106. // }
  2107. // },
  2108. addAskList() {
  2109. // this.askJson.checkJson.push({
  2110. // checkCount: [],
  2111. // checkPerent: [],
  2112. // });
  2113. this.askJson.askJson.push({
  2114. askstitle: "",
  2115. askItem: 1,
  2116. checkList: [],
  2117. });
  2118. this.askJson.askCount++;
  2119. },
  2120. deleteAskList() {
  2121. this.askJson.askJson.splice(-1);
  2122. this.askJson.askCount--;
  2123. },
  2124. addcheckList(json) {
  2125. json.checkList.length++;
  2126. json.askItem++;
  2127. },
  2128. deletecheckList(json) {
  2129. json.checkList.length--;
  2130. json.askItem--;
  2131. },
  2132. addAsk() {
  2133. // this.unitJson[this.unitIndex].chapterInfo[0].taskJson[this.taskCount]
  2134. if (this.askJson.askTitle === "") {
  2135. this.$message.error("问卷调查标题不能为空!");
  2136. return;
  2137. }
  2138. var aj = this.askJson.askJson;
  2139. var b = 1;
  2140. for (var i = 0; i < aj.length; i++) {
  2141. if (aj[i].askstitle === "") {
  2142. var a = 1;
  2143. for (let index = 0; index < aj[i].askItem; index++) {
  2144. const element = aj[i].checkList[index]
  2145. ? aj[i].checkList[index]
  2146. : "";
  2147. if (element != "") {
  2148. b++;
  2149. this.$message.error("填写了问卷调查选项,问卷调查题目不能为空!");
  2150. return;
  2151. } else {
  2152. a++;
  2153. }
  2154. }
  2155. if (b == 1) {
  2156. this.$message.error("至少填写一个问题");
  2157. return;
  2158. }
  2159. // if (a > 1) {
  2160. // aj.splice(i, 1);
  2161. // }
  2162. } else if (aj[i].askstitle != "") {
  2163. for (let index = 0; index < aj[i].askItem; index++) {
  2164. const element = aj[i].checkList[index]
  2165. ? aj[i].checkList[index]
  2166. : "";
  2167. var index = 0;
  2168. for (var z = 0; z < aj[i].checkList.length; z++) {
  2169. var checkC = aj[i].checkList[z] ? aj[i].checkList[z] : "";
  2170. if (checkC != "") {
  2171. index++;
  2172. } else {
  2173. this.$message.error("问卷调查选项不能为空!");
  2174. return;
  2175. }
  2176. }
  2177. b++;
  2178. if (index < 2) {
  2179. this.$message.error(
  2180. "填写了问卷调查的题目,问卷调查选项至少要有两项!"
  2181. );
  2182. return;
  2183. }
  2184. // if (element == "") {
  2185. // this.$message.error(
  2186. // "填写了问卷调查的题目,问卷调查选项不能为空!"
  2187. // );
  2188. // return;
  2189. // }
  2190. }
  2191. }
  2192. }
  2193. this.askJson.askJson = this.askJson.askJson.filter((el) => {
  2194. var elc = el.checkList.filter((element) => {
  2195. return element != "";
  2196. });
  2197. return el.askstitle != "" && elc.length != 0;
  2198. });
  2199. this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
  2200. this.taskCount
  2201. ].toolChoose[this.toolIndex] = this.askJson;
  2202. this.dialogVisible5 = false;
  2203. },
  2204. selectCourseDetail() {
  2205. if (this.cid == "" || this.cid == undefined) {
  2206. console.log("这是新增课程");
  2207. } else {
  2208. let params = {
  2209. cid: this.cid,
  2210. };
  2211. this.ajax
  2212. .get(this.$store.state.api + "select_course_detail", params)
  2213. .then((res) => {
  2214. this.loading = true;
  2215. this.unitJson = JSON.parse(res.data[0][0].chapters);
  2216. // this.unitJson[0].chapterInfo = JSON.parse(res.data[0][0].chapters);
  2217. for (var j in this.unitJson) {
  2218. for (var i in this.unitJson[j].chapterInfo) {
  2219. this.unitJson[j].chapterInfo[i].taskJson[
  2220. this.taskCount
  2221. ].toolChoose = this.unitJson[j].chapterInfo[i].taskJson[
  2222. this.taskCount
  2223. ].toolChoose
  2224. ? this.unitJson[j].chapterInfo[i].taskJson[this.taskCount]
  2225. .toolChoose
  2226. : [];
  2227. }
  2228. }
  2229. // this.unitJson[0].dyText = "";
  2230. this.courseName = res.data[0][0].title;
  2231. this.courseText = res.data[0][0].brief;
  2232. this.cover = JSON.parse(res.data[0][0].cover);
  2233. this.noneBtnImg = this.cover.length >= 1;
  2234. this.checkboxList =
  2235. res.data[0][0].course_student.length > 0
  2236. ? JSON.parse(res.data[0][0].course_student)
  2237. : [];
  2238. this.isTeacherSee =
  2239. res.data[0][0].is_teacher_look == 0 ? true : false;
  2240. this.myWord = res.data[0][0].template;
  2241. this.templateC.id = "123";
  2242. this.nbOrder = res.data[0][0].ordernumber;
  2243. // this.CourseType[0] = res.data[1];
  2244. // this.selectType();
  2245. for (var i = 0; i < res.data[1].length; i++) {
  2246. // this.courseTypeId[this.CourseType[0][i].typePid] =
  2247. // this.CourseType[0][i].typeid;
  2248. this.courseTypeId.push(res.data[1][i].typeid);
  2249. }
  2250. console.log(this.courseTypeId);
  2251. this.$forceUpdate();
  2252. })
  2253. .catch((err) => {
  2254. console.error(err);
  2255. });
  2256. }
  2257. },
  2258. getTypeName() {
  2259. console.log(this.courseTypeId);
  2260. this.$forceUpdate();
  2261. },
  2262. selectType() {
  2263. this.ajax
  2264. .get(this.$store.state.api + "selectType")
  2265. .then((res) => {
  2266. this.CourseType = res.data;
  2267. for (var i = 0; i < res.data[0].length; i++) {
  2268. if (!this.cid) {
  2269. this.courseTypeId[res.data[0][i].id] = "";
  2270. }
  2271. for (var j = 0; j < res.data[1].length; j++) {
  2272. if (res.data[0][i].id == res.data[1][j].pid) {
  2273. if (!this.CourseTypeJson[res.data[0][i].id]) {
  2274. this.CourseTypeJson[res.data[0][i].id] = [];
  2275. }
  2276. this.CourseTypeJson[res.data[0][i].id].push(res.data[1][j]);
  2277. }
  2278. }
  2279. }
  2280. })
  2281. .catch((err) => {
  2282. console.error(err);
  2283. });
  2284. },
  2285. },
  2286. created() {
  2287. this.getStudent();
  2288. this.getTemplate();
  2289. this.selectType();
  2290. this.loading = false;
  2291. setTimeout(() => {
  2292. this.selectCourseDetail();
  2293. }, 500);
  2294. },
  2295. };
  2296. </script>
  2297. <style scoped>
  2298. .dialog_diy >>> .el-dialog__header {
  2299. background: #3d67bc !important;
  2300. padding: 15px 20px;
  2301. }
  2302. .dialog_diy >>> .el-dialog__title {
  2303. color: #fff;
  2304. }
  2305. .dialog_diy >>> .el-dialog__headerbtn {
  2306. top: 19px;
  2307. }
  2308. .dialog_diy >>> .el-dialog__headerbtn .el-dialog__close {
  2309. color: #fff;
  2310. }
  2311. .dialog_diy >>> .el-dialog__headerbtn .el-dialog__close:hover {
  2312. color: #fff;
  2313. }
  2314. .dialog_diy >>> .el-dialog__body,
  2315. .dialog_diy >>> .el-dialog__footer {
  2316. background: #fafafa;
  2317. }
  2318. .left {
  2319. border-right: 1px solid rgb(60, 94, 143);
  2320. display: flex;
  2321. flex-direction: column;
  2322. align-items: center;
  2323. min-height: 600px;
  2324. width: 385px;
  2325. height: 80%;
  2326. }
  2327. .tips {
  2328. color: rgb(128, 128, 128);
  2329. font-size: 12px;
  2330. width: 270px;
  2331. margin: 40px;
  2332. }
  2333. .pb_content {
  2334. /* background: #fff; */
  2335. /* height: 100%; */
  2336. height: auto !important;
  2337. margin: 20px 20px 20px 20px;
  2338. }
  2339. .pb_content_body {
  2340. width: 100% !important;
  2341. height: 100%;
  2342. }
  2343. .info_solid {
  2344. width: 270px;
  2345. height: 30px;
  2346. border-left: 1px solid #bdbdbd;
  2347. margin: 10px 0px 10px 30px;
  2348. }
  2349. .info_steps {
  2350. width: 270px;
  2351. font-size: 0.875rem;
  2352. display: flex;
  2353. align-items: center;
  2354. }
  2355. .info_steps span:nth-child(1) {
  2356. width: 30px;
  2357. height: 30px;
  2358. background: rgba(0, 0, 0, 0.38);
  2359. display: block;
  2360. color: #fff;
  2361. border-radius: 40px;
  2362. text-align: center;
  2363. line-height: 30px;
  2364. }
  2365. .steps_active {
  2366. background: #3d67bc !important;
  2367. }
  2368. .info_steps span:nth-child(2) {
  2369. margin-left: 5px;
  2370. }
  2371. .right {
  2372. height: 100%;
  2373. width: 100%;
  2374. }
  2375. .basic_box {
  2376. width: 90%;
  2377. margin: 0 auto;
  2378. position: relative;
  2379. }
  2380. .basic_box_success {
  2381. width: 80%;
  2382. min-height: 455px;
  2383. margin: 50px auto;
  2384. position: relative;
  2385. text-align: center;
  2386. border-bottom: 1px solid #bfbfbf;
  2387. }
  2388. .info_title {
  2389. font-size: 1.5em;
  2390. margin: 20px 30px 20px 30px;
  2391. }
  2392. .bInfo_title {
  2393. font-size: 16px;
  2394. text-align: left;
  2395. margin-top: 20px;
  2396. margin-bottom: 10px;
  2397. }
  2398. .small_title {
  2399. font-size: 14px;
  2400. line-height: 40px;
  2401. }
  2402. .binfo_input {
  2403. font: inherit;
  2404. color: currentColor;
  2405. width: 100%;
  2406. margin: 0;
  2407. padding: 15px 14px;
  2408. display: block;
  2409. min-width: 0;
  2410. outline: none;
  2411. box-sizing: content-box;
  2412. background: none;
  2413. -webkit-tap-highlight-color: transparent;
  2414. border: 1px solid rgba(0, 0, 0, 0.23);
  2415. border-radius: 4px;
  2416. box-sizing: border-box;
  2417. resize: none;
  2418. }
  2419. .binfo_input:focus-visible {
  2420. border: 1px solid rgba(61, 103, 188);
  2421. }
  2422. .chapter_beizhu {
  2423. font-size: 12px;
  2424. font-weight: bold;
  2425. float: right;
  2426. color: rgb(128, 128, 128);
  2427. margin-top: 5px;
  2428. }
  2429. .chapter_uploadBox1 {
  2430. text-align: left;
  2431. background-color: rgb(242, 242, 242);
  2432. width: 100%;
  2433. height: 67px;
  2434. padding: 0px 15px;
  2435. border-radius: 8px;
  2436. overflow: hidden;
  2437. font-size: 16px;
  2438. box-sizing: border-box;
  2439. position: relative;
  2440. }
  2441. .chapter_add {
  2442. width: 100%;
  2443. height: 32px;
  2444. margin-top: 15px;
  2445. cursor: pointer;
  2446. }
  2447. .chapter_add_l {
  2448. margin-left: 5px;
  2449. width: 30px;
  2450. height: 30px;
  2451. float: left;
  2452. border: 1px solid #aaa;
  2453. color: #aaa;
  2454. border-radius: 50%;
  2455. font-size: 25px;
  2456. text-align: center;
  2457. }
  2458. .chapter_add_r {
  2459. font-size: 18px;
  2460. height: 40px;
  2461. line-height: 30px;
  2462. text-indent: 10px;
  2463. color: #aaa;
  2464. }
  2465. .chapter_add_r span {
  2466. font-size: 12px;
  2467. color: rgb(204, 204, 204);
  2468. }
  2469. .chapter_add_input {
  2470. display: none;
  2471. }
  2472. .line {
  2473. width: 85%;
  2474. margin: 0 auto;
  2475. border-top: 1px solid #e5e5e5;
  2476. margin-top: 20px;
  2477. }
  2478. .info_btnBox {
  2479. width: 100%;
  2480. display: flex;
  2481. justify-content: space-evenly;
  2482. margin: 20px 0 25px 0;
  2483. padding-bottom: 20px;
  2484. }
  2485. .info_btn,
  2486. .teacherWord {
  2487. color: #fff;
  2488. background-color: #6a8ed5;
  2489. padding: 8px 24px;
  2490. font-size: 0.9375rem;
  2491. box-shadow: 0px 1px 3px 0px rgb(0 0 0 / 20%), 0px 2px 2px 0px rgb(0 0 0 / 14%),
  2492. 0px 3px 1px -2px rgb(0 0 0 / 12%);
  2493. min-width: 64px;
  2494. font-weight: 500;
  2495. border-radius: 4px;
  2496. box-sizing: border-box;
  2497. border: none;
  2498. cursor: pointer;
  2499. }
  2500. .teacherWord {
  2501. width: 105px !important;
  2502. text-align: center !important;
  2503. line-height: 36px !important;
  2504. padding: 0 !important;
  2505. font-size: 14px !important;
  2506. margin: 10px 0 !important;
  2507. }
  2508. .wordTeacher {
  2509. display: flex;
  2510. flex-direction: column;
  2511. width: 20%;
  2512. text-align: center;
  2513. font-size: 14px;
  2514. margin: 30px 30px 0 10px;
  2515. background: #fff;
  2516. position: relative;
  2517. border-radius: 5px;
  2518. padding: 25px 0px;
  2519. }
  2520. .wordPic {
  2521. margin: 0 auto;
  2522. width: 60px;
  2523. height: 60px;
  2524. cursor: pointer;
  2525. }
  2526. .deleteWord {
  2527. width: 22px;
  2528. height: 22px;
  2529. position: absolute;
  2530. right: 20px;
  2531. top: -10px;
  2532. cursor: pointer;
  2533. }
  2534. .wordPic > img,
  2535. .deleteWord > img,
  2536. .addToolImg > img {
  2537. width: 100%;
  2538. height: 100%;
  2539. }
  2540. .info_btn:hover {
  2541. background-color: #4f7cd5 !important;
  2542. }
  2543. .cru_selectBox {
  2544. display: flex;
  2545. margin: 24px 0 10px;
  2546. flex-wrap: nowrap;
  2547. white-space: nowrap;
  2548. overflow: auto;
  2549. position: relative;
  2550. height: 47px;
  2551. }
  2552. .cru_selectBox::-webkit-scrollbar {
  2553. /*滚动条整体样式*/
  2554. width: 6px;
  2555. /*高宽分别对应横竖滚动条的尺寸*/
  2556. height: 6px;
  2557. }
  2558. /*定义滚动条轨道 内阴影+圆角*/
  2559. .cru_selectBox::-webkit-scrollbar-track {
  2560. border-radius: 10px;
  2561. background-color: #eee;
  2562. }
  2563. /*定义滑块 内阴影+圆角*/
  2564. .cru_selectBox::-webkit-scrollbar-thumb {
  2565. border-radius: 10px;
  2566. -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);
  2567. background-color: rgba(0, 0, 0, 0.1);
  2568. }
  2569. .cru_line {
  2570. position: absolute;
  2571. bottom: 0px;
  2572. transition: all 0.5s;
  2573. left: 0px;
  2574. width: 125px;
  2575. margin-left: -25px;
  2576. }
  2577. .cru_select {
  2578. font-size: 21px;
  2579. margin-right: 37px;
  2580. margin-left: 5px;
  2581. cursor: pointer;
  2582. color: #a6a6a6;
  2583. }
  2584. .cru_selected {
  2585. color: #0b7fc2 !important;
  2586. }
  2587. .chapter_contentbox {
  2588. display: flex;
  2589. align-items: center;
  2590. margin-top: 15px;
  2591. }
  2592. .chapter_contentbox div:nth-child(1) {
  2593. width: 150px;
  2594. margin: 0px;
  2595. font-size: 2em;
  2596. color: black;
  2597. display: block;
  2598. white-space: nowrap;
  2599. overflow: hidden;
  2600. text-overflow: ellipsis;
  2601. font-weight: 600;
  2602. }
  2603. .chapter_contentbox div:nth-child(2) {
  2604. width: 380px;
  2605. }
  2606. .chapter_contentbox div:nth-child(3),
  2607. .remove {
  2608. background-image: url(../../assets/remove.png);
  2609. cursor: pointer;
  2610. opacity: 0.5;
  2611. width: 40px;
  2612. height: 50px;
  2613. background-repeat: no-repeat;
  2614. background-position: 5px 10px;
  2615. }
  2616. .binfo_input {
  2617. font: inherit;
  2618. color: currentColor;
  2619. width: 100%;
  2620. margin: 0;
  2621. padding: 15px 14px;
  2622. display: block;
  2623. min-width: 0;
  2624. outline: none;
  2625. box-sizing: content-box;
  2626. background: none;
  2627. border: 1px solid rgba(0, 0, 0, 0.23);
  2628. border-radius: 4px;
  2629. box-sizing: border-box;
  2630. background: #fff;
  2631. }
  2632. .binfo_input:focus-visible {
  2633. border: 1px solid rgba(61, 103, 188);
  2634. }
  2635. .time {
  2636. display: flex;
  2637. margin: 35px 0 80px 0;
  2638. }
  2639. .chapter_btnbox {
  2640. width: 160px;
  2641. border-radius: 5px;
  2642. border: 2px dashed gray;
  2643. display: flex;
  2644. padding: 8px 50px;
  2645. align-items: center;
  2646. justify-content: center;
  2647. margin: 30px auto 0;
  2648. cursor: pointer;
  2649. }
  2650. .icon_add {
  2651. position: relative;
  2652. width: 24px;
  2653. padding-top: 20px;
  2654. border-radius: 100%;
  2655. border-width: 2px;
  2656. border-style: solid;
  2657. border-color: gray;
  2658. }
  2659. .icon_add i:nth-child(1) {
  2660. position: absolute;
  2661. left: 50%;
  2662. top: 50%;
  2663. height: 60%;
  2664. transform: translate(-50%, -50%);
  2665. border-width: 1px;
  2666. border-style: solid;
  2667. border-color: inherit;
  2668. }
  2669. .icon_add i:nth-child(2) {
  2670. position: absolute;
  2671. top: 50%;
  2672. left: 50%;
  2673. width: 60%;
  2674. transform: translate(-50%, -50%);
  2675. border-width: 1px;
  2676. border-style: solid;
  2677. border-color: inherit;
  2678. }
  2679. .chapter_btn_w {
  2680. font-size: 0.9375rem;
  2681. font-weight: bold;
  2682. color: gray;
  2683. margin-left: 20px;
  2684. }
  2685. .disUoloadSty >>> .el-icon-plus {
  2686. display: none !important; /* 上传按钮隐藏 */
  2687. }
  2688. .imgLeft {
  2689. margin: 15px 0;
  2690. }
  2691. .add_info_box {
  2692. margin: 20px 0;
  2693. }
  2694. .add_info_box button {
  2695. margin: 0 10px 10px 0;
  2696. }
  2697. .add_chapters_box {
  2698. text-align: left;
  2699. background-color: rgb(232 234 237);
  2700. width: 100%;
  2701. padding: 0px 15px;
  2702. border-radius: 15px;
  2703. font-size: 16px;
  2704. box-sizing: border-box;
  2705. position: relative;
  2706. padding: 0 10px 5px 10px;
  2707. height: 185px;
  2708. overflow-y: auto;
  2709. overflow-x: hidden;
  2710. }
  2711. .homework_box {
  2712. display: flex;
  2713. align-items: flex-start;
  2714. flex-wrap: wrap;
  2715. margin: 15px 0 0 0;
  2716. flex-direction: column;
  2717. align-content: flex-start;
  2718. }
  2719. .course_homework {
  2720. display: flex;
  2721. justify-content: center;
  2722. flex-direction: row;
  2723. align-items: center;
  2724. margin: 0 10px 0 0;
  2725. }
  2726. .course_homework >>> .el-input__inner {
  2727. width: 140px;
  2728. margin-left: 15px;
  2729. }
  2730. .chapter_upload_move {
  2731. position: relative;
  2732. background-color: #fff;
  2733. position: absolute;
  2734. width: 100%;
  2735. top: 0px;
  2736. left: 0px;
  2737. border: 1px solid #eee;
  2738. border-radius: 5px;
  2739. transition: width 2s;
  2740. -moz-transition: width 2s;
  2741. -webkit-transition: width 2s;
  2742. -o-transition: width 2s;
  2743. }
  2744. .chapter_upload_l_i {
  2745. background-image: url("../../assets/icon.png");
  2746. background-position: 3px -165px;
  2747. width: 30px;
  2748. height: 30px;
  2749. margin: 10px auto 0 auto;
  2750. }
  2751. .left_first {
  2752. display: flex;
  2753. flex-direction: column;
  2754. flex-wrap: nowrap;
  2755. width: 65%;
  2756. }
  2757. .right_first {
  2758. width: 100%;
  2759. height: 100%;
  2760. margin-top: 15px;
  2761. }
  2762. .right_title {
  2763. height: 30px;
  2764. padding: 20px 0 10px 30px;
  2765. border-bottom: 1px solid #f2f2f2;
  2766. }
  2767. .people {
  2768. border: 1px solid rgb(229 229 229);
  2769. height: 495px;
  2770. border-radius: 5px;
  2771. width: 100%;
  2772. overflow: auto;
  2773. }
  2774. .people_top {
  2775. display: flex;
  2776. width: 100%;
  2777. justify-content: space-between;
  2778. align-items: center;
  2779. }
  2780. .people_nav,
  2781. .people_top_right {
  2782. padding: 20px 0 0 20px;
  2783. }
  2784. .people_search {
  2785. display: flex;
  2786. position: relative;
  2787. }
  2788. .people_search >>> .el-input__inner {
  2789. height: 25px;
  2790. width: 95%;
  2791. }
  2792. .search_img {
  2793. width: 20px;
  2794. height: 20px;
  2795. position: absolute;
  2796. right: 15px;
  2797. top: 3px;
  2798. }
  2799. .search_img > img {
  2800. width: 100%;
  2801. height: 100%;
  2802. }
  2803. .people_name {
  2804. display: flex;
  2805. justify-content: flex-start;
  2806. padding: 20px 0 0 25px;
  2807. flex-direction: column;
  2808. flex-wrap: wrap;
  2809. }
  2810. .people_name >>> .el-checkbox {
  2811. width: 100%;
  2812. display: flex;
  2813. align-items: center;
  2814. margin-bottom: 10px;
  2815. }
  2816. .people_name >>> .el-checkbox__label {
  2817. text-overflow: ellipsis;
  2818. overflow: hidden;
  2819. width: 100%;
  2820. }
  2821. .right_img {
  2822. width: 150px;
  2823. height: 150px;
  2824. margin: 0 auto;
  2825. }
  2826. .right_img > img {
  2827. width: 100%;
  2828. height: 100%;
  2829. }
  2830. .number {
  2831. margin-top: 20px;
  2832. color: #4aa6ff;
  2833. text-decoration: underline;
  2834. }
  2835. .success_button {
  2836. display: flex;
  2837. text-align: center;
  2838. margin: 5% 0 auto;
  2839. flex-direction: row;
  2840. justify-content: center;
  2841. }
  2842. .look_course {
  2843. margin-right: 40px;
  2844. background: #3d67bc;
  2845. width: 200px;
  2846. height: 35px;
  2847. line-height: 35px;
  2848. color: #fff;
  2849. text-align: center;
  2850. font-size: 14px;
  2851. border-radius: 5px;
  2852. cursor: pointer;
  2853. }
  2854. .attend_others {
  2855. width: 250px;
  2856. background: #4fb13c;
  2857. height: 35px;
  2858. line-height: 35px;
  2859. color: #fff;
  2860. text-align: center;
  2861. font-size: 14px;
  2862. border-radius: 5px;
  2863. cursor: pointer;
  2864. }
  2865. .dialog_diy2 >>> .el-dialog__body {
  2866. text-align: center;
  2867. }
  2868. .write_togother {
  2869. position: absolute;
  2870. right: 45px;
  2871. display: flex;
  2872. top: 5%;
  2873. }
  2874. .write_people {
  2875. font-size: 14px;
  2876. line-height: 50px;
  2877. padding-right: 10px;
  2878. }
  2879. .end_write {
  2880. background: #3d67bc;
  2881. color: #fff;
  2882. width: 100px;
  2883. height: 35px;
  2884. line-height: 35px;
  2885. text-align: center;
  2886. font-size: 14px;
  2887. border-radius: 5px;
  2888. cursor: pointer;
  2889. }
  2890. .chapter_upload {
  2891. height: 50px;
  2892. margin-top: 12px;
  2893. position: relative;
  2894. display: flex;
  2895. align-items: center;
  2896. width: 100%;
  2897. }
  2898. .chapter_upload_t {
  2899. background-color: #fff;
  2900. position: absolute;
  2901. height: 100%;
  2902. top: 0px;
  2903. left: 0px;
  2904. border-radius: 40px;
  2905. box-sizing: border-box;
  2906. box-shadow: 0 0 3px 3px #dfdfdf;
  2907. }
  2908. .chapter_upload_o {
  2909. width: 100%;
  2910. height: 100%;
  2911. position: relative;
  2912. z-index: 1;
  2913. }
  2914. .chapter_upload_l {
  2915. /* width: 50px;
  2916. height: 50px;
  2917. border-right: 1px solid #eee;
  2918. float: left; */
  2919. }
  2920. .chapter_upload_ic {
  2921. height: 30px;
  2922. float: right;
  2923. }
  2924. .chapter_upload_ic_l {
  2925. width: 50px;
  2926. height: 50px;
  2927. float: left;
  2928. }
  2929. .chapter_upload_ic_l div {
  2930. width: 30px;
  2931. height: 35px;
  2932. background: url("../../assets/icon/icon.png");
  2933. }
  2934. .chapter_upload_ic_r {
  2935. width: 50px;
  2936. height: 50px;
  2937. float: left;
  2938. margin-left: 0px;
  2939. display: flex;
  2940. align-items: center;
  2941. }
  2942. .chapter_upload_ic_r div {
  2943. width: 25px;
  2944. height: 25px;
  2945. background-image: url("../../assets/delete.png");
  2946. background-size: 100% 100%;
  2947. }
  2948. .chapter_upload_n {
  2949. display: flex;
  2950. text-indent: 10px;
  2951. text-decoration: none;
  2952. text-overflow: ellipsis;
  2953. white-space: nowrap;
  2954. overflow: hidden;
  2955. width: 55%;
  2956. margin-left: 20px;
  2957. cursor: pointer;
  2958. }
  2959. .chapter_upload_l_i1 {
  2960. background-image: url("../../assets/icon/video.png");
  2961. width: 28px;
  2962. height: 28px;
  2963. /* margin: 10px auto 0 auto; */
  2964. background-size: 100% 100%;
  2965. }
  2966. .chapter_upload_l_i5 {
  2967. background-image: url("../../assets/icon/word.png");
  2968. width: 24px;
  2969. height: 24px;
  2970. /* margin: 10px auto 0 auto; */
  2971. background-size: 100% 100%;
  2972. }
  2973. .chapter_upload_ud {
  2974. display: flex;
  2975. flex-direction: column;
  2976. margin-left: 5px;
  2977. justify-content: center;
  2978. }
  2979. .chapter_upload_up {
  2980. background-image: url("../../assets/icon/up.png");
  2981. width: 17px;
  2982. height: 15px;
  2983. background-size: 100% 100%;
  2984. cursor: pointer;
  2985. }
  2986. .chapter_upload_down {
  2987. background-image: url("../../assets/icon/down.png");
  2988. width: 17px;
  2989. height: 15px;
  2990. margin: 2px auto 0 auto;
  2991. background-size: 100% 100%;
  2992. cursor: pointer;
  2993. }
  2994. .addWordStyle {
  2995. display: flex;
  2996. flex-direction: row;
  2997. justify-content: flex-start;
  2998. overflow-x: auto;
  2999. white-space: nowrap;
  3000. flex-wrap: wrap;
  3001. }
  3002. /* table 样式 */
  3003. .cont >>> table {
  3004. border-top: 1px solid #ccc;
  3005. border-left: 1px solid #ccc;
  3006. }
  3007. .cont >>> table td,
  3008. .cont >>> table th {
  3009. border-bottom: 1px solid #ccc;
  3010. border-right: 1px solid #ccc;
  3011. padding: 3px 5px;
  3012. }
  3013. .cont >>> table th {
  3014. border-bottom: 2px solid #ccc;
  3015. text-align: center;
  3016. }
  3017. /* blockquote 样式 */
  3018. .cont >>> blockquote {
  3019. display: block;
  3020. border-left: 8px solid #d0e5f2;
  3021. padding: 5px 10px;
  3022. margin: 10px 0;
  3023. line-height: 1.4;
  3024. font-size: 100%;
  3025. background-color: #f1f1f1;
  3026. }
  3027. /* code 样式 */
  3028. .cont >>> code {
  3029. display: inline-block;
  3030. *display: inline;
  3031. *zoom: 1;
  3032. background-color: #f1f1f1;
  3033. border-radius: 3px;
  3034. padding: 3px 5px;
  3035. margin: 0 3px;
  3036. }
  3037. .cont >>> pre code {
  3038. display: block;
  3039. }
  3040. /* ul ol 样式 */
  3041. .cont >>> ul,
  3042. ol {
  3043. margin: 10px 0 10px 20px;
  3044. }
  3045. .wordbox {
  3046. display: flex;
  3047. flex-wrap: wrap;
  3048. cursor: pointer;
  3049. width: 100%;
  3050. }
  3051. .checkword {
  3052. width: 22px;
  3053. height: 22px;
  3054. margin: 10px auto 0;
  3055. cursor: pointer;
  3056. }
  3057. .checkword img {
  3058. width: 100%;
  3059. }
  3060. .stepBg {
  3061. margin: 0 25px 0 0;
  3062. width: 17%;
  3063. min-width: 230px;
  3064. border-radius: 10px;
  3065. display: flex;
  3066. flex-direction: column;
  3067. justify-content: flex-start;
  3068. align-items: center;
  3069. flex-wrap: nowrap;
  3070. background: #fff;
  3071. max-height: 700px;
  3072. }
  3073. .stepBg > div {
  3074. height: 80px;
  3075. width: 85%;
  3076. cursor: pointer;
  3077. margin: 10px 0;
  3078. border-radius: 10px;
  3079. }
  3080. .first,
  3081. .second,
  3082. .third,
  3083. .four {
  3084. background: #4a83d0;
  3085. height: 90px;
  3086. color: #fff;
  3087. display: flex;
  3088. flex-direction: row;
  3089. align-items: center;
  3090. justify-content: center;
  3091. }
  3092. .first > div:nth-child(1),
  3093. .second > div:nth-child(1),
  3094. .third > div:nth-child(1),
  3095. .four > div:nth-child(1) {
  3096. margin: 5px 10px 0 0;
  3097. width: 2rem;
  3098. }
  3099. .firstNo,
  3100. .secondNo,
  3101. .thirdNo,
  3102. .fourNo {
  3103. background: #e7e7e7;
  3104. color: #adadad;
  3105. display: flex;
  3106. flex-direction: row;
  3107. align-items: center;
  3108. justify-content: center;
  3109. }
  3110. .firstNo > div:nth-child(1),
  3111. .secondNo > div:nth-child(1),
  3112. .thirdNo > div:nth-child(1),
  3113. .fourNo > div:nth-child(1) {
  3114. margin: 5px 10px 0 0;
  3115. width: 2rem;
  3116. }
  3117. .uploadWidth >>> .el-upload {
  3118. width: 60px;
  3119. height: 60px;
  3120. position: relative;
  3121. }
  3122. .addPeople {
  3123. background: #fa6060;
  3124. width: 135px;
  3125. height: 40px;
  3126. color: #fff;
  3127. border-radius: 5px;
  3128. text-align: center;
  3129. line-height: 40px;
  3130. font-size: 15px;
  3131. cursor: pointer;
  3132. }
  3133. .kcImg {
  3134. width: 60px;
  3135. margin-left: 10px;
  3136. }
  3137. .zyImg {
  3138. width: 55px;
  3139. margin: 0 10px;
  3140. }
  3141. .deleteZy {
  3142. width: 20px;
  3143. position: absolute;
  3144. top: 5px;
  3145. right: 5px;
  3146. cursor: pointer;
  3147. }
  3148. .kcImg > img,
  3149. .zyImg > img,
  3150. .deleteZy > img {
  3151. width: 100%;
  3152. height: 100%;
  3153. }
  3154. .zyBox {
  3155. display: flex;
  3156. flex-direction: row;
  3157. align-items: center;
  3158. background: #67d37d;
  3159. color: #fff;
  3160. width: 210px;
  3161. margin: 20px 20px 0 0;
  3162. border-radius: 10px;
  3163. height: 70px;
  3164. position: relative;
  3165. }
  3166. .upCss {
  3167. display: flex;
  3168. flex-direction: row;
  3169. justify-content: flex-start;
  3170. }
  3171. /* .upCss >>> .el-upload {
  3172. margin-right: 30px;
  3173. } */
  3174. .upCss >>> .el-icon-plus {
  3175. position: none !important;
  3176. width: 200px;
  3177. height: 100px;
  3178. display: flex;
  3179. flex-wrap: nowrap;
  3180. flex-direction: column;
  3181. align-items: center;
  3182. justify-content: center;
  3183. border: 1px dashed #ccc;
  3184. min-width: 78px;
  3185. min-height: 100px;
  3186. z-index: 999;
  3187. }
  3188. .addStageImg {
  3189. min-width: 25px;
  3190. min-height: 25px;
  3191. width: 25px;
  3192. height: 25px;
  3193. cursor: pointer;
  3194. }
  3195. .addHW {
  3196. width: 28px;
  3197. height: 28px;
  3198. cursor: pointer;
  3199. }
  3200. .addStageImg > img,
  3201. .addHW > img {
  3202. width: 100%;
  3203. height: 100%;
  3204. }
  3205. .addNewPP >>> .el-dialog__body {
  3206. padding: 5px 20px;
  3207. }
  3208. .isHeight {
  3209. height: 680px;
  3210. }
  3211. .toolChoose {
  3212. display: flex;
  3213. width: 100%;
  3214. flex-direction: row;
  3215. flex-wrap: wrap;
  3216. }
  3217. .tool {
  3218. display: flex;
  3219. flex-direction: column;
  3220. flex-wrap: nowrap;
  3221. width: fit-content;
  3222. margin: 10px 0 10px 0;
  3223. align-items: center;
  3224. }
  3225. .tool + .tool {
  3226. margin-right: 45px;
  3227. }
  3228. .whiteBIcon {
  3229. width: 70px;
  3230. cursor: pointer;
  3231. display: flex;
  3232. flex-direction: column;
  3233. flex-wrap: nowrap;
  3234. align-items: center;
  3235. }
  3236. .whiteBIcon > img,
  3237. .check > img,
  3238. .toolIcon > img,
  3239. .arrow > img {
  3240. width: 100%;
  3241. height: 100%;
  3242. }
  3243. .check {
  3244. width: 20px;
  3245. height: 20px;
  3246. cursor: pointer;
  3247. margin: 10px 0;
  3248. }
  3249. .customWidth >>> .el-dialog {
  3250. min-width: 500px !important;
  3251. }
  3252. .a_addBox {
  3253. margin: 10px 0;
  3254. background: #fff;
  3255. padding: 15px;
  3256. max-height: 400px;
  3257. overflow: auto;
  3258. }
  3259. .a_add_box {
  3260. border-bottom: 2px solid #eee;
  3261. padding-bottom: 10px;
  3262. }
  3263. .a_add_head {
  3264. display: flex;
  3265. align-items: center;
  3266. justify-content: space-between;
  3267. margin: 10px 0;
  3268. font-size: 18px;
  3269. }
  3270. .a_add_head .a_add_head_input {
  3271. width: 300px;
  3272. }
  3273. .a_add_head .a_add_head_div {
  3274. display: flex;
  3275. align-items: center;
  3276. justify-content: space-between;
  3277. }
  3278. .a_add_body {
  3279. display: flex;
  3280. align-items: center;
  3281. }
  3282. .a_add_input {
  3283. display: flex;
  3284. align-items: center;
  3285. flex-wrap: wrap;
  3286. /* flex-direction: column; */
  3287. /* width: 100%; */
  3288. }
  3289. .width100 {
  3290. width: 100%;
  3291. }
  3292. .a_add_input .a_add_persent {
  3293. /* display: flex; */
  3294. /* flex-direction: column; */
  3295. width: 100%;
  3296. }
  3297. .a_add_persent_div {
  3298. width: 100%;
  3299. display: flex;
  3300. align-items: center;
  3301. }
  3302. .a_add_persent_div span {
  3303. margin: 5px 0;
  3304. }
  3305. .a_add_persent_div span:nth-child(1) {
  3306. width: 30%;
  3307. }
  3308. .a_add_persent_div span:nth-child(2) {
  3309. width: 7%;
  3310. }
  3311. .a_add_persent_div span:nth-child(3) {
  3312. width: 40%;
  3313. }
  3314. .a_add_persent_title {
  3315. /* margin-bottom: 10px; */
  3316. }
  3317. .a_add_body_div {
  3318. display: flex;
  3319. align-items: center;
  3320. justify-content: center;
  3321. flex-direction: column;
  3322. }
  3323. .all_choose {
  3324. display: flex;
  3325. flex-direction: row;
  3326. align-items: flex-start;
  3327. }
  3328. .all_choose > span {
  3329. width: 80px;
  3330. display: block;
  3331. letter-spacing: 14px;
  3332. }
  3333. .all_choose >>> .el-checkbox-group {
  3334. display: flex;
  3335. flex-direction: row;
  3336. width: 820px;
  3337. flex-wrap: wrap;
  3338. align-content: center;
  3339. justify-content: flex-start;
  3340. align-items: center;
  3341. }
  3342. .all_choose > .el-checkbox-group >>> .el-checkbox {
  3343. margin-bottom: 10px;
  3344. display: flex;
  3345. flex-direction: row;
  3346. align-items: center;
  3347. }
  3348. .all_choose > .el-checkbox-group > .el-checkbox >>> .el-checkbox__label {
  3349. min-width: 80px;
  3350. overflow: hidden;
  3351. width: 80px;
  3352. text-overflow: ellipsis;
  3353. white-space: nowrap;
  3354. }
  3355. .all_choose > .el-checkbox-group > .el-checkbox >>> .el-checkbox__label:hover {
  3356. width: auto;
  3357. }
  3358. .choose > div:nth-child(3) > span {
  3359. letter-spacing: 0 !important;
  3360. }
  3361. .choose {
  3362. display: flex;
  3363. flex-direction: column;
  3364. flex-wrap: nowrap;
  3365. height: 100%;
  3366. justify-content: space-evenly;
  3367. align-items: flex-start;
  3368. }
  3369. .both {
  3370. display: flex;
  3371. flex-direction: row;
  3372. flex-wrap: wrap;
  3373. width: 100%;
  3374. height: 350px;
  3375. align-items: center;
  3376. justify-content: flex-start;
  3377. }
  3378. .notice >>> .el-dialog {
  3379. width: 500px !important;
  3380. text-align: center;
  3381. }
  3382. .notice >>> .el-button {
  3383. margin-top: 20px;
  3384. }
  3385. .whiteBg {
  3386. background: #fff;
  3387. border-radius: 10px;
  3388. min-width: 800px;
  3389. }
  3390. .chooseWho {
  3391. display: flex;
  3392. width: 250px;
  3393. flex-direction: row;
  3394. flex-wrap: nowrap;
  3395. justify-content: space-between;
  3396. padding-bottom: 10px;
  3397. }
  3398. .chooseWho > div {
  3399. cursor: pointer;
  3400. padding-bottom: 10px;
  3401. }
  3402. .isChooseActive {
  3403. color: #3e88f4;
  3404. border-bottom: 2px solid #2f80f3;
  3405. }
  3406. .toolSort {
  3407. display: flex;
  3408. flex-direction: row;
  3409. flex-wrap: wrap;
  3410. justify-content: flex-start;
  3411. align-items: flex-start;
  3412. min-width: 685px;
  3413. }
  3414. .toolSort > div {
  3415. margin-right: 45px;
  3416. }
  3417. .tools {
  3418. width: 100%;
  3419. display: flex;
  3420. flex-direction: column;
  3421. flex-wrap: nowrap;
  3422. align-items: flex-start;
  3423. }
  3424. .leftTools,
  3425. .rightTools {
  3426. width: 50%;
  3427. }
  3428. .rightTools {
  3429. display: flex;
  3430. flex-direction: row;
  3431. flex-wrap: nowrap;
  3432. justify-content: space-around;
  3433. }
  3434. .firstToolList {
  3435. display: flex;
  3436. flex-direction: column;
  3437. flex-wrap: nowrap;
  3438. align-items: center;
  3439. }
  3440. .iconList {
  3441. display: flex;
  3442. flex-direction: row;
  3443. flex-wrap: wrap;
  3444. justify-content: flex-start;
  3445. align-items: center;
  3446. margin: 20px 0 5px 0;
  3447. width: 240px;
  3448. min-width: 240px;
  3449. }
  3450. .iconTool {
  3451. display: flex;
  3452. flex-direction: column;
  3453. flex-wrap: nowrap;
  3454. align-items: center;
  3455. justify-content: flex-start;
  3456. margin: 15px 10px;
  3457. }
  3458. .toolIcon {
  3459. width: 50px;
  3460. }
  3461. .taskBorder {
  3462. border: 1px solid #e1e1e1;
  3463. border-radius: 10px;
  3464. margin-top: 20px;
  3465. min-height: 1160px;
  3466. position: relative;
  3467. background: #fbfbfb;
  3468. /* transition: all .5s; */
  3469. }
  3470. .smallTaskBorder {
  3471. height: 135px;
  3472. min-height: 135px !important;
  3473. overflow: hidden;
  3474. }
  3475. .taskBorder > div {
  3476. padding: 30px 0 10px 30px;
  3477. }
  3478. .addTaskBorder {
  3479. border: 2px solid #e1e1e1;
  3480. border-radius: 10px;
  3481. margin-top: 25px;
  3482. cursor: pointer;
  3483. }
  3484. .addTaskBorder > div {
  3485. width: 100px;
  3486. margin: 0 auto;
  3487. }
  3488. .addTaskBorder > div > img {
  3489. width: 100%;
  3490. height: 100%;
  3491. }
  3492. .funBlock {
  3493. display: flex;
  3494. padding: 15px 0;
  3495. flex-direction: row;
  3496. justify-content: flex-end;
  3497. align-items: center;
  3498. position: absolute;
  3499. right: 15px;
  3500. bottom: 35px;
  3501. }
  3502. .funBlockTop {
  3503. /* top: 35px; */
  3504. }
  3505. .fold {
  3506. display: flex;
  3507. margin: 0 10px;
  3508. flex-direction: row;
  3509. align-items: center;
  3510. cursor: pointer;
  3511. }
  3512. .arrow {
  3513. width: 15px;
  3514. height: 15px;
  3515. margin-left: 10px;
  3516. }
  3517. .addToolFun {
  3518. display: flex;
  3519. width: 150px;
  3520. flex-direction: row;
  3521. align-items: center;
  3522. justify-content: center;
  3523. border: 1px dashed;
  3524. border-radius: 5px;
  3525. height: 50px;
  3526. margin: 35px auto 0;
  3527. cursor: pointer;
  3528. }
  3529. .addToolImg {
  3530. width: 30px;
  3531. height: 30px;
  3532. margin-right: 20px;
  3533. }
  3534. </style>