addCourse.vue 63 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386
  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. "
  12. >
  13. <div
  14. style="
  15. display: flex;
  16. flex-direction: row;
  17. justify-content: flex-start;
  18. align-items: center;
  19. width: 25%;
  20. border-radius: 80px;
  21. box-shadow: 0px 1px 2px 3px #f2f2f2;
  22. margin: 30px 20px 20px 45px;
  23. min-width: 420px;
  24. "
  25. >
  26. <h3 class="info_title" v-if="steps == 1">项目内容填写</h3>
  27. <h3 class="info_title" v-if="steps == 2">请选择文档模板</h3>
  28. <h3 class="info_title" v-if="steps == 3">项目内容填写</h3>
  29. <el-breadcrumb
  30. separator-class="el-icon-arrow-right"
  31. style="margin-top: 15px"
  32. >
  33. <el-breadcrumb-item
  34. :to="{ path: '/course?userid=' + userid + '&oid=' + oid }"
  35. >项目管理</el-breadcrumb-item
  36. >
  37. <el-breadcrumb-item>添加项目</el-breadcrumb-item>
  38. </el-breadcrumb>
  39. </div>
  40. <div
  41. v-if="steps == 1"
  42. style="font-size: 25px; color: #dedede; font-weight: bold;margin-top: 12px;"
  43. >
  44. 第一步
  45. </div>
  46. <div
  47. v-if="steps == 2"
  48. style="font-size: 25px; color: #dedede; font-weight: bold;margin-top: 12px;"
  49. >
  50. 第二步
  51. </div>
  52. <div
  53. v-if="steps == 3"
  54. style="font-size: 25px; color: #dedede; font-weight: bold;margin-top: 12px;"
  55. >
  56. 第三步
  57. </div>
  58. </div>
  59. <div style="display: flex">
  60. <div class="stepBg" :class="steps == 3 ? 'isHeight' : ''">
  61. <div v-if="steps == 1" class="first" @click="navSteps(1)">
  62. <div><img src="../../assets/icon/first.png" alt="" /></div>
  63. <div>填写基本信息</div>
  64. </div>
  65. <div v-else class="firstNo" @click="navSteps(1)">
  66. <div><img src="../../assets/icon/firstNo.png" alt="" /></div>
  67. <div>填写基本信息</div>
  68. </div>
  69. <div v-if="steps == 2" class="second" @click="navSteps(2)">
  70. <div><img src="../../assets/icon/second.png" alt="" /></div>
  71. <div>选择文档模板</div>
  72. </div>
  73. <div v-else class="secondNo" @click="navSteps(2)">
  74. <div><img src="../../assets/icon/secondNo.png" alt="" /></div>
  75. <div>选择文档模板</div>
  76. </div>
  77. <div v-if="steps == 3" class="third" @click="navSteps(3)">
  78. <div><img src="../../assets/icon/third.png" alt="" /></div>
  79. <div>上传项目内容</div>
  80. </div>
  81. <div v-else class="thirdNo" @click="navSteps(3)">
  82. <div><img src="../../assets/icon/thirdNo.png" alt="" /></div>
  83. <div>上传项目内容</div>
  84. </div>
  85. <div v-if="steps == 4" class="four">
  86. <div><img src="../../assets/icon/four.png" alt="" /></div>
  87. <div>上传完成</div>
  88. </div>
  89. <div v-else class="fourNo">
  90. <div><img src="../../assets/icon/fourNo.png" alt="" /></div>
  91. <div>上传完成</div>
  92. </div>
  93. </div>
  94. <div
  95. style="
  96. width: 65%;
  97. margin: 10px;
  98. background: #f1f1f1;
  99. border-radius: 10px;
  100. min-height: 550px;
  101. "
  102. v-if="this.steps == 1"
  103. >
  104. <div class="basic_box">
  105. <div class="big_box">
  106. <div class="left_first">
  107. <div>
  108. <div class="bInfo_title">
  109. <span style="color: red">*</span>项目名称
  110. </div>
  111. <div style="display: flex">
  112. <img src="../../assets/icon/projectName.png" alt="" style="margin-right: 5px;" />
  113. <input
  114. type="text"
  115. placeholder="请输入项目名称"
  116. class="binfo_input"
  117. v-model="courseName"
  118. />
  119. </div>
  120. </div>
  121. <div style="margin-top: 30px">
  122. <div class="bInfo_title">
  123. <span style="color: red">*</span>简要描述
  124. </div>
  125. <div>
  126. <textarea
  127. rows="8"
  128. class="binfo_input"
  129. cols=""
  130. v-model="courseText"
  131. ></textarea>
  132. </div>
  133. </div>
  134. <el-switch
  135. v-model="isTeacherSee"
  136. active-text="允许给其他老师查看"
  137. style="margin: 40px 0 0 25px"
  138. >
  139. </el-switch>
  140. </div>
  141. <div class="right_first">
  142. <div>
  143. <div style="flex: 0.5 1 0%; margin: 0 20px 0 0">
  144. <div class="bInfo_title">课程封面</div>
  145. <el-upload
  146. class="upCss"
  147. action="#"
  148. list-type="picture"
  149. v-loading="uploadLoading1"
  150. :http-request="beforeUpload1"
  151. ref="upload1"
  152. :on-preview="handlePictureCardPreview"
  153. :on-remove="handle_remove1"
  154. :show-file-list="true"
  155. :file-list="cover"
  156. accept="image/*"
  157. :limit="1"
  158. :on-exceed="onExceed"
  159. >
  160. <i class="el-icon-plus"></i>
  161. </el-upload>
  162. </div>
  163. <div style="flex: 0.5 1 0%; margin-top: 30px">
  164. <div class="bInfo_title">
  165. <span style="color: red">*</span>选择项目成员
  166. </div>
  167. <div
  168. class="addPeople"
  169. @click="addPP"
  170. v-if="this.checkboxList.length == 0"
  171. >
  172. 添加成员
  173. </div>
  174. <div class="addPeople" @click="addPP" v-else>
  175. 已添加,点击查看
  176. </div>
  177. </div>
  178. <div style="flex: 0.5 1 0%; margin-top: 30px">
  179. <div class="bInfo_title">协同编辑</div>
  180. <div class="addPeople" style="background: #6b92c9">
  181. 添加协同成员
  182. </div>
  183. </div>
  184. </div>
  185. </div>
  186. </div>
  187. </div>
  188. </div>
  189. <div
  190. style="
  191. width: 65%;
  192. margin: 10px;
  193. background: #f1f1f1;
  194. border-radius: 10px;
  195. min-height: 550px;
  196. "
  197. v-if="this.steps == 2"
  198. >
  199. <div class="basic_box" style="margin: 20px 30px 0 !important">
  200. <div
  201. style="
  202. color: #b8b8b8;
  203. background: #fff;
  204. width: 26%;
  205. height: 40px;
  206. border-radius: 15px;
  207. padding-left: 20px;
  208. line-height: 40px;
  209. font-size: 17px;
  210. box-shadow: 0px 1px 2px 2px #e0e0e0;
  211. "
  212. >
  213. 请选择合适的项目模板
  214. </div>
  215. <div class="wordbox">
  216. <div
  217. class="wordTeacher"
  218. v-for="(aa, indexF) in templateArray"
  219. :key="indexF"
  220. @click="checkTemplate(aa)"
  221. >
  222. <div class="wordPic">
  223. <img src="../../assets/icon/wordMub.png" alt="" />
  224. </div>
  225. <div
  226. style="
  227. margin-top: 10px;
  228. line-height: 19px;
  229. overflow: hidden;
  230. text-overflow: ellipsis;
  231. white-space: nowrap;
  232. padding: 0 20px;
  233. "
  234. >
  235. {{ aa.title }}
  236. </div>
  237. <div class="checkword">
  238. <img
  239. src="../../assets/icon/checked.png"
  240. alt=""
  241. v-if="templateC.id == aa.id"
  242. />
  243. <img src="../../assets/icon/check.png" alt="" v-else />
  244. </div>
  245. </div>
  246. </div>
  247. </div>
  248. </div>
  249. <div
  250. style="
  251. width: 65%;
  252. margin: 10px;
  253. background: #f1f1f1;
  254. border-radius: 10px;
  255. min-height: 550px;
  256. "
  257. v-if="this.steps == 3"
  258. >
  259. <div class="basic_box">
  260. <div class="big_box">
  261. <div class="left_first">
  262. <div>
  263. <div class="bInfo_title">
  264. <span style="color: red">*</span>项目名称
  265. </div>
  266. <div>
  267. <input
  268. type="text"
  269. placeholder="项目名称"
  270. class="binfo_input"
  271. v-model="courseName"
  272. />
  273. </div>
  274. </div>
  275. <div style="margin-top: 30px">
  276. <div class="bInfo_title">
  277. <span style="color: red">*</span>简要描述
  278. </div>
  279. <div>
  280. <textarea
  281. rows="4"
  282. placeholder="简要描述"
  283. class="binfo_input"
  284. cols=""
  285. v-model="courseText"
  286. ></textarea>
  287. </div>
  288. </div>
  289. <el-switch
  290. v-model="isTeacherSee"
  291. active-text="允许给其他老师查看"
  292. style="margin: 40px 0 0 25px"
  293. >
  294. </el-switch>
  295. </div>
  296. <div class="right_first">
  297. <div>
  298. <div style="flex: 0.5 1 0%; margin: 0 20px 0 0">
  299. <div class="bInfo_title">课程封面</div>
  300. <el-upload
  301. class="upCss"
  302. action="#"
  303. list-type="picture"
  304. v-loading="uploadLoading1"
  305. :http-request="beforeUpload1"
  306. ref="upload1"
  307. :on-preview="handlePictureCardPreview"
  308. :on-remove="handle_remove1"
  309. :show-file-list="true"
  310. :file-list="cover"
  311. accept="image/*"
  312. :limit="1"
  313. :on-exceed="onExceed"
  314. >
  315. <i class="el-icon-plus"></i>
  316. </el-upload>
  317. </div>
  318. <div style="flex: 0.5 1 0%; margin-top: 30px">
  319. <div class="bInfo_title">
  320. <span style="color: red">*</span>选择项目成员
  321. </div>
  322. <div
  323. class="addPeople"
  324. @click="addPP"
  325. v-if="this.checkboxList.length == 0"
  326. >
  327. 点击添加成员
  328. </div>
  329. <div class="addPeople" @click="addPP" v-else>
  330. 已添加,点击查看
  331. </div>
  332. </div>
  333. <div style="flex: 0.5 1 0%; margin-top: 30px">
  334. <div class="bInfo_title">协同编辑</div>
  335. <div class="addPeople" style="background: #6b92c9">
  336. 添加协同编辑
  337. </div>
  338. </div>
  339. </div>
  340. </div>
  341. </div>
  342. <div class="line"></div>
  343. <div
  344. style="display: flex; flex-direction: row; align-items: center"
  345. >
  346. <div class="cru_selectBox">
  347. <div
  348. v-for="(item, index) in unitJson"
  349. :key="item.id"
  350. class="cru_select"
  351. :class="unitIndex == index ? 'cru_selected' : 'cru_select'"
  352. @click="unitSet(index)"
  353. >
  354. 第{{ index + 1 }}阶段
  355. </div>
  356. <img
  357. src="../../assets/line.png"
  358. class="cru_line"
  359. :style="{
  360. left: offsetLetfPx + 'px',
  361. }"
  362. />
  363. </div>
  364. <div class="addStageImg" @click="addunit">
  365. <img src="../../assets/icon/add.png" alt="" />
  366. </div>
  367. </div>
  368. <div
  369. class="chapter_box"
  370. v-for="(item, index) in unitJson[unitIndex].chapterInfo"
  371. :key="item.id"
  372. >
  373. <div>
  374. <div class="chapter_contentbox">
  375. <div>第{{ unitIndex + 1 }}阶段</div>
  376. <div>
  377. <input
  378. type="text"
  379. placeholder="单元标题"
  380. class="binfo_input"
  381. v-model="unitJson[unitIndex].dyName"
  382. />
  383. </div>
  384. <div
  385. v-if="unitJson.length > 1"
  386. @click="deleteUnit(unitIndex)"
  387. ></div>
  388. </div>
  389. <div class="time">
  390. <div class="small_title">
  391. 开始时间<span style="color: red">*</span>
  392. </div>
  393. <el-date-picker
  394. v-model="unitJson[unitIndex].startTime"
  395. type="date"
  396. placeholder="选择日期"
  397. style="margin-left: 5px"
  398. >
  399. </el-date-picker>
  400. <div class="small_title" style="margin-left: 40px">
  401. 结束时间<span style="color: red">*</span>
  402. </div>
  403. <el-date-picker
  404. v-model="unitJson[unitIndex].endTime"
  405. type="date"
  406. placeholder="选择日期"
  407. style="margin-left: 5px"
  408. >
  409. </el-date-picker>
  410. </div>
  411. <el-switch
  412. v-model="unitJson[unitIndex].isTalk"
  413. active-text="是否开启评价"
  414. style="margin: 25px 0px 0px 0"
  415. >
  416. </el-switch>
  417. </div>
  418. <div class="line"></div>
  419. <div
  420. class="basic_box"
  421. style="margin: 45px 0 0 15px; min-height: 0"
  422. >
  423. <h3 class="info_title" style="margin: 0">附件添加</h3>
  424. <div class="add_info_box">
  425. <button class="info_btn" @click="addImg($event)">
  426. 添加视频
  427. <input
  428. type="file"
  429. accept="video/mp4,video/quicktime,video/x-msvideo"
  430. style="display: none"
  431. @change="beforeUpload2($event, unitIndex, 2)"
  432. />
  433. </button>
  434. <button class="info_btn" @click="addImg($event)">
  435. 添加附件
  436. <input
  437. type="file"
  438. accept="application/pdf,.ppt,.pptx,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document"
  439. style="display: none"
  440. @change="beforeUpload2($event, unitIndex, 3)"
  441. />
  442. </button>
  443. </div>
  444. <div>
  445. <div
  446. class="add_chapters_box"
  447. v-if="item.chapterData.length == 0"
  448. style="height: 185px"
  449. ></div>
  450. <div
  451. v-else
  452. class="add_chapters_box"
  453. style="display: flex; flex-direction: column"
  454. >
  455. <div
  456. class="chapter_upload"
  457. v-for="(item1, index1) in item.chapterData"
  458. :key="item1.id"
  459. @click="
  460. getChapterData(
  461. $event,
  462. unitIndex,
  463. index,
  464. index1,
  465. item1.type
  466. )
  467. "
  468. >
  469. <div class="chapter_upload_t" style="width: 100%"></div>
  470. <div
  471. className="chapter_upload_o"
  472. style="position: relative"
  473. >
  474. <div
  475. className="chapter_upload_l"
  476. style="padding: 1px 0 0 10px"
  477. >
  478. <div
  479. v-if="item1.type == 2"
  480. class="chapter_upload_l_i1"
  481. style="margin: 10px auto 0 0"
  482. ></div>
  483. <div
  484. v-if="item1.type == 3"
  485. class="chapter_upload_l_i5"
  486. style="margin: 10px auto 0 0"
  487. ></div>
  488. </div>
  489. <div
  490. class="chapter_upload_ic"
  491. style="
  492. cursor: pointer;
  493. position: absolute;
  494. width: 45px;
  495. right: 0;
  496. top: 0;
  497. "
  498. >
  499. <div class="chapter_upload_ic_l"></div>
  500. <div
  501. class="chapter_upload_ic_r"
  502. style="position: absolute"
  503. @click.stop="
  504. deleteChapterData(
  505. $event,
  506. unitIndex,
  507. index,
  508. index1
  509. )
  510. "
  511. >
  512. <div></div>
  513. </div>
  514. </div>
  515. <div
  516. class="chapter_upload_n"
  517. style="
  518. display: flex;
  519. alignitems: center;
  520. paddingleft: 10px;
  521. "
  522. >
  523. <input
  524. v-if="item1.type == 2 || item1.type == 3"
  525. :placeholder="item1.name"
  526. @change="
  527. updataVideoT(
  528. $event,
  529. unitIndex,
  530. chapterIndex,
  531. index1
  532. )
  533. "
  534. style="
  535. border: none;
  536. outline: none;
  537. width: 55%;
  538. minwidth: 215px;
  539. z-index: 99;
  540. "
  541. />
  542. <input
  543. :placeholder="item1.name"
  544. v-else
  545. style="
  546. border: none;
  547. outline: none;
  548. width: 55%;
  549. minwidth: 215px;
  550. "
  551. readonly="true"
  552. />
  553. <div class="chapter_upload_ud" style="z-index: 99">
  554. <div
  555. class="chapter_upload_up"
  556. @click="upCd($event, unitIndex, index, index1)"
  557. ></div>
  558. <div
  559. class="chapter_upload_down"
  560. @click="
  561. downCd($event, unitIndex, index, index1)
  562. "
  563. ></div>
  564. </div>
  565. </div>
  566. </div>
  567. </div>
  568. </div>
  569. </div>
  570. </div>
  571. <div class="line"></div>
  572. <div
  573. class="basic_box"
  574. style="margin: 45px 0 0 15px; min-height: 0"
  575. >
  576. <h3 class="info_title" style="margin: 0">作业设置</h3>
  577. <div class="homework_box">
  578. <div style="display: flex; justify-content: flex-start">
  579. <div class="addHW" @click="addHw($event)">
  580. <img src="../../assets/icon/addHW.png" alt="" />
  581. <input
  582. type="file"
  583. style="display: none"
  584. @change="beforeUpload2($event, unitIndex, 5)"
  585. />
  586. </div>
  587. <div
  588. class="zyBox"
  589. v-for="(item2, index2) in item.homeworkList"
  590. :key="index2"
  591. >
  592. <div
  593. class="deleteZy"
  594. @click="deleteHomeworkBox(unitIndex, index, index2)"
  595. >
  596. <img src="../../assets/icon/delete.png" alt="" />
  597. </div>
  598. <div class="zyImg">
  599. <img src="../../assets/zy.png" alt="" />
  600. </div>
  601. <div
  602. style="
  603. width: 110px;
  604. font-size: 15px;
  605. overflow: hidden;
  606. white-space: nowrap;
  607. "
  608. >
  609. {{ item2.name }}
  610. </div>
  611. </div>
  612. </div>
  613. </div>
  614. </div>
  615. </div>
  616. </div>
  617. </div>
  618. <div
  619. style="
  620. width: 65%;
  621. margin: 10px;
  622. background: #f1f1f1;
  623. border-radius: 10px;
  624. min-height: 550px;
  625. "
  626. v-if="this.steps == 4"
  627. >
  628. <div class="basic_box_success">
  629. <div class="right_img">
  630. <img src="../../assets/icon/right.png" alt="" />
  631. </div>
  632. <div style="font-weight: bold">成功</div>
  633. <div>您的课程编号</div>
  634. <div class="number">{{ number }}</div>
  635. <div class="success_button">
  636. <div class="look_course">邀请老师协同编辑</div>
  637. <div class="attend_others" @click="dialogVisible = true">
  638. 预览课程
  639. </div>
  640. </div>
  641. </div>
  642. </div>
  643. </div>
  644. <div class="line"></div>
  645. <div class="info_btnBox">
  646. <button
  647. class="info_btn"
  648. v-if="steps == 1"
  649. @click="goTo('/course?userid=' + userid + '&oid=' + oid)"
  650. >
  651. 返回课程
  652. </button>
  653. <button
  654. class="info_btn"
  655. v-if="steps > 1 && steps != 5"
  656. @click="lastSteps"
  657. >
  658. {{ steps == 4 ? "返回首页" : "上一步" }}
  659. </button>
  660. <button class="info_btn" v-if="steps < 5" @click="nextSteps">
  661. {{ steps == 3 ? "确认上传" : "下一步" }}
  662. </button>
  663. </div>
  664. </div>
  665. </div>
  666. <el-dialog
  667. title="提示"
  668. :visible.sync="dialogVisible"
  669. :append-to-body="true"
  670. width="25%"
  671. :before-close="handleClose"
  672. class="dialog_diy2"
  673. >
  674. <div>请复制该链接邀请协同编辑</div>
  675. <div>http://www.boomyon.com/index-zhang.com</div>
  676. <span slot="footer" class="dialog-footer">
  677. <el-button type="primary">复制链接分享</el-button>
  678. <el-button @click="dialogVisible = false">取消</el-button>
  679. </span>
  680. </el-dialog>
  681. <el-dialog
  682. :title="updateBoolean2 ? '查看文档' : '添加文档'"
  683. :visible.sync="dialogVisible1"
  684. :append-to-body="true"
  685. width="25%"
  686. :before-close="handleClose"
  687. >
  688. <el-form>
  689. <el-form-item label="文档标题">
  690. <el-input
  691. v-model="tTitle"
  692. auto-complete="off"
  693. placeholder="请输入文档标题名..."
  694. ></el-input>
  695. </el-form-item>
  696. <div>文档简介</div>
  697. <editor-bar v-model="tdetail" @change="change"></editor-bar>
  698. </el-form>
  699. <span slot="footer" class="dialog-footer">
  700. <el-button @click="dialogVisible1 = false">取 消</el-button>
  701. <el-button type="primary" @click="addWord" v-if="!updateBoolean2"
  702. >添加</el-button
  703. >
  704. <el-button type="primary" @click="upWord" v-else>修 改</el-button>
  705. </span>
  706. </el-dialog>
  707. <el-dialog
  708. title="添加文档"
  709. :visible.sync="dialogVisible2"
  710. :append-to-body="true"
  711. width="500px"
  712. :before-close="handleClose"
  713. class="dialog_diy"
  714. >
  715. <el-form>
  716. <el-form-item label="文档标题">
  717. <el-input
  718. v-model="templateC.title"
  719. auto-complete="off"
  720. placeholder="请输入文档标题名..."
  721. ></el-input>
  722. </el-form-item>
  723. <div>文档内容</div>
  724. <editor-bar v-model="cTemplate" @change="change"></editor-bar>
  725. </el-form>
  726. <span slot="footer" class="dialog-footer">
  727. <el-button @click="dialogVisible2 = false">取 消</el-button>
  728. <el-button type="primary" @click="wordNext()">保存,下一步</el-button>
  729. </span>
  730. </el-dialog>
  731. <el-dialog
  732. title="添加项目成员"
  733. :visible.sync="dialogVisible3"
  734. :append-to-body="true"
  735. width="25%"
  736. height="80%"
  737. :before-close="handleClose"
  738. class="addNewPP customWidth"
  739. >
  740. <div class="people">
  741. <div class="people_top">
  742. <div class="people_nav">选择成员</div>
  743. <div class="people_top_right">
  744. <div class="people_search">
  745. <el-input
  746. placeholder="搜索成员"
  747. v-model="searchPeople"
  748. ></el-input>
  749. <div class="search_img" @click="searchStudent">
  750. <img src="../../assets/icon/search.png" alt="" />
  751. </div>
  752. </div>
  753. </div>
  754. </div>
  755. <el-checkbox-group v-model="checkboxList" class="people_name">
  756. <el-checkbox
  757. v-for="item in studentJuri"
  758. :key="item.userid"
  759. :label="item.userid"
  760. >{{ item.name ? item.name : "暂无学生可选" }}</el-checkbox
  761. >
  762. </el-checkbox-group>
  763. </div>
  764. <span slot="footer" class="dialog-footer">
  765. <el-button @click="dialogVisible3 = false">取 消</el-button>
  766. <el-button type="primary" @click="isAddPP">确定</el-button>
  767. </span>
  768. </el-dialog>
  769. </div>
  770. </template>
  771. <script>
  772. import "../../common/aws-sdk-2.235.1.min.js";
  773. import $ from "jquery";
  774. import EditorBar from "../../components/tools/wangEnduit";
  775. export default {
  776. components: { EditorBar },
  777. data() {
  778. return {
  779. checkAll: false,
  780. checkedCities: [],
  781. isIndeterminate: true,
  782. steps: 1,
  783. courseName: "",
  784. isTeacherSee: false,
  785. courseText: "",
  786. formLabelWidth: "100px",
  787. uploadLoading1: false,
  788. noneBtnImg: false,
  789. noneBtnImg1: false,
  790. updateBoolean2: false,
  791. unitIndex: 0,
  792. dialogVisible: false,
  793. dialogVisible1: false,
  794. dialogVisible2: false,
  795. dialogVisible3: false,
  796. searchPeople: "",
  797. userid: this.$route.query.userid,
  798. oid: this.$route.query.oid,
  799. cover: [], //课程封面
  800. unitJson: [
  801. {
  802. dyName: "", //单元标题
  803. startTime: "", //开始时间
  804. endTime: "", //结束时间
  805. isTalk: false, //是否开启评价
  806. chapterInfo: [
  807. {
  808. isread: false,
  809. chapterid: this.guid(),
  810. title: "",
  811. courseName: "",
  812. chapterData: [],
  813. itemCount: 1,
  814. fileList1: [],
  815. homeworkList: [],
  816. video: [],
  817. testData: [],
  818. pData: [],
  819. templateArray: [],
  820. },
  821. ],
  822. },
  823. ],
  824. studentJuri: [],
  825. checkboxList: [],
  826. number: "",
  827. tTitle: "",
  828. tdetail: "",
  829. templateC: {},
  830. cTemplate: "",
  831. };
  832. },
  833. computed: {
  834. offsetLetfPx: function () {
  835. //addnum可以直接在模板语法里面用,相当于data内的值
  836. return (
  837. $(".cru_select")[this.unitIndex] &&
  838. $(".cru_select")[this.unitIndex].offsetLeft
  839. );
  840. },
  841. },
  842. methods: {
  843. handleCheckAllChange(val) {
  844. this.checkedCities = val ? cityOptions : [];
  845. this.isIndeterminate = false;
  846. },
  847. handleCheckedCitiesChange(value) {
  848. let checkedCount = value.length;
  849. this.checkAll = checkedCount === this.cities.length;
  850. this.isIndeterminate =
  851. checkedCount > 0 && checkedCount < this.cities.length;
  852. },
  853. addHw(e) {
  854. var el = e.currentTarget;
  855. el.getElementsByTagName("input")[0].click();
  856. },
  857. change(val) {
  858. console.log(val);
  859. },
  860. handleClose(done) {
  861. done();
  862. },
  863. imgChange1(file, fileList, type) {
  864. if (type == 1) {
  865. var _tmp = this.cover;
  866. } else if (type == 2 || type == 3) {
  867. var _tmp = this.unitJson[this.unitIndex].chapterInfo[0].chapterData;
  868. } else if (type == 4) {
  869. var _tmp = this.unitJson[this.unitIndex].chapterInfo[0].fileList1;
  870. } else {
  871. var _tmp = this.unitJson[this.unitIndex].chapterInfo[0].homeworkList;
  872. }
  873. this.noneBtnImg = _tmp.length >= 1;
  874. },
  875. goTo(path) {
  876. this.$router.push(path);
  877. },
  878. guid() {
  879. var _num,
  880. i,
  881. _guid = "";
  882. for (i = 0; i < 32; i++) {
  883. _guid += Math.floor(Math.random() * 16).toString(16); //随机0 - 16 的数字 转变为16进制的字符串
  884. _num = Math.floor((i - 7) / 4); //计算 (i-7)除4
  885. if (_num > -1 && _num < 4 && i == 7 + 4 * _num) {
  886. //会使guid中间加 "-" 形式为xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
  887. _guid += "-";
  888. }
  889. }
  890. return _guid;
  891. },
  892. lastSteps() {
  893. if (this.steps == 4) {
  894. window.location.href =
  895. "./course.vue?userid=" + this.userid + "&oid=" + this.oid;
  896. } else {
  897. this.steps--;
  898. }
  899. },
  900. navSteps(s) {
  901. if (s == 1) {
  902. this.steps = 1;
  903. }
  904. if (s == 2) {
  905. if (
  906. this.courseName != "" &&
  907. this.courseText != "" &&
  908. this.checkboxList.length != 0
  909. ) {
  910. this.steps = 2;
  911. } else {
  912. this.$message.error("请将信息填写完整");
  913. }
  914. }
  915. if (s == 3) {
  916. if (
  917. this.courseName != "" &&
  918. this.courseText != "" &&
  919. this.checkboxList.length != 0 &&
  920. this.templateC.id != undefined
  921. ) {
  922. this.steps = 3;
  923. } else {
  924. this.$message.error("请将信息填写完整");
  925. return;
  926. }
  927. }
  928. },
  929. nextSteps() {
  930. if (this.steps == 1) {
  931. if (
  932. this.courseName != "" &&
  933. this.courseText != "" &&
  934. this.checkboxList.length != 0
  935. ) {
  936. this.steps++;
  937. } else {
  938. this.$message.error("请将信息填写完整");
  939. }
  940. } else if (this.steps == 2) {
  941. if (this.templateC.id == "" || this.templateC.id == undefined) {
  942. this.$message.error("请选择文档");
  943. return;
  944. }
  945. this.dialogVisible2 = true;
  946. } else if (this.steps == 3) {
  947. this.addWork();
  948. this.steps++;
  949. }
  950. },
  951. unitSet(i) {
  952. this.unitIndex = i;
  953. },
  954. time() {
  955. if (!this.now) {
  956. this.now = new Date().getTime();
  957. return true;
  958. } else {
  959. let time = new Date().getTime();
  960. if (time - this.now > 3000) {
  961. this.now = time;
  962. return true;
  963. } else {
  964. return false;
  965. }
  966. }
  967. },
  968. deleteUnit(i) {
  969. var _this = this;
  970. if (_this.time()) {
  971. _this
  972. .$confirm("确定删除此单元吗?", "提示", {
  973. confirmButtonText: "确定",
  974. cancelButtonText: "取消",
  975. type: "warning",
  976. })
  977. .then(() => {
  978. _this.unitJson.splice(i, 1);
  979. var a = 0;
  980. if (_this.unitIndex > 0) {
  981. a = _this.unitIndex - 1;
  982. }
  983. _this.$message.success("删除成功");
  984. })
  985. .catch(() => {
  986. return;
  987. });
  988. }
  989. },
  990. handlePictureCardPreview(file) {
  991. this.dialogImageUrl = file.url;
  992. },
  993. clean(i, c) {
  994. this.unitJson[this.unitIndex].chapterInfo[i].fileList1.splice(c, 1);
  995. },
  996. handle_remove1(file, fileList, type) {
  997. var _tmp = this.cover;
  998. for (var i = 0, len = _tmp.length; i < len; i++) {
  999. if (_tmp[i].uid == file.uid) {
  1000. _tmp.splice(i, 1);
  1001. break;
  1002. }
  1003. this.cover = _tmp;
  1004. }
  1005. this.noneBtnImg = _tmp.length >= 1;
  1006. },
  1007. addImg(e) {
  1008. var el = e.currentTarget;
  1009. el.getElementsByTagName("input")[0].click();
  1010. },
  1011. beforeUpload1(event, type) {
  1012. const loading = this.openLoading();
  1013. var file = event.file;
  1014. var credentials = {
  1015. accessKeyId: "AKIATLPEDU37QV5CHLMH",
  1016. secretAccessKey: "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",
  1017. }; //秘钥形式的登录上传
  1018. window.AWS.config.update(credentials);
  1019. window.AWS.config.region = "cn-northwest-1"; //设置区域
  1020. var bucket = new window.AWS.S3({ params: { Bucket: "ccrb" } }); //选择桶
  1021. var _this = this;
  1022. if (file) {
  1023. var params = {
  1024. Key:
  1025. file.name.split(".")[0] +
  1026. new Date().getTime() +
  1027. "." +
  1028. file.name.split(".")[1],
  1029. ContentType: file.type,
  1030. Body: file,
  1031. "Access-Control-Allow-Credentials": "*",
  1032. ACL: "public-read",
  1033. }; //key可以设置为桶的相抵路径,Body为文件, ACL最好要设置
  1034. var options = {
  1035. partSize: 2048 * 1024 * 1024,
  1036. queueSize: 2,
  1037. leavePartsOnError: true,
  1038. };
  1039. bucket
  1040. .upload(params, options)
  1041. .on("httpUploadProgress", function (evt) {
  1042. //这里可以写进度条
  1043. // console.log("Uploaded : " + parseInt((evt.loaded * 80) / evt.total) + '%');
  1044. })
  1045. .send(function (err, data) {
  1046. loading.close();
  1047. if (err) {
  1048. var a = _this.$refs.upload1.uploadFiles;
  1049. a.splice(a.length - 1, a.length);
  1050. _this.$message.error("上传失败");
  1051. } else {
  1052. _this.cover.push({
  1053. name: file.name,
  1054. url: data.Location,
  1055. uid: file.uid,
  1056. });
  1057. _this.imgChange1(null, null, 1);
  1058. console.log(data.Location);
  1059. }
  1060. });
  1061. }
  1062. },
  1063. beforeUpload(data) {
  1064. this.$refs.upload1.uploadFiles;
  1065. this.uploadLoading1 = true;
  1066. var file = data.file;
  1067. var credentials = {
  1068. accessKeyId: "AKIATLPEDU37QV5CHLMH",
  1069. secretAccessKey: "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",
  1070. }; //秘钥形式的登录上传
  1071. window.AWS.config.update(credentials);
  1072. window.AWS.config.region = "cn-northwest-1"; //设置区域
  1073. var bucket = new window.AWS.S3({ params: { Bucket: "ccrb" } }); //选择桶
  1074. var _this = this;
  1075. if (file) {
  1076. var params = {
  1077. Key:
  1078. file.name.split(".")[0] +
  1079. new Date().getTime() +
  1080. "." +
  1081. file.name.split(".")[1],
  1082. ContentType: file.type,
  1083. Body: file,
  1084. "Access-Control-Allow-Credentials": "*",
  1085. ACL: "public-read",
  1086. }; //key可以设置为桶的相抵路径,Body为文件, ACL最好要设置
  1087. var options = {
  1088. partSize: 2048 * 1024 * 1024,
  1089. queueSize: 2,
  1090. leavePartsOnError: true,
  1091. };
  1092. bucket
  1093. .upload(params, options)
  1094. .on("httpUploadProgress", function (evt) {
  1095. //这里可以写进度条
  1096. // console.log("Uploaded : " + parseInt((evt.loaded * 80) / evt.total) + '%');
  1097. })
  1098. .send(function (err, data) {
  1099. _this.uploadLoading1 = false;
  1100. if (err) {
  1101. var a = _this.$refs.upload1.uploadFiles;
  1102. a.splice(a.length - 1, a.length);
  1103. _this.$message.error("上传失败");
  1104. } else {
  1105. //上传成功处理
  1106. _this.unitJson[_this.unitIndex].chapterInfo[0].fileList1.push({
  1107. name: file.name,
  1108. url: data.Location,
  1109. uid: file.uid,
  1110. });
  1111. _this.imgChange();
  1112. console.log(data.Location);
  1113. }
  1114. });
  1115. }
  1116. },
  1117. onExceed() {
  1118. this.$message.error("课程封面仅支持上传一张,请删除后再进行上传");
  1119. },
  1120. beforeUpload2(event, unitIndex, type) {
  1121. const loading = this.openLoading();
  1122. var file = event.target.files[0];
  1123. var credentials = {
  1124. accessKeyId: "AKIATLPEDU37QV5CHLMH",
  1125. secretAccessKey: "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",
  1126. }; //秘钥形式的登录上传
  1127. window.AWS.config.update(credentials);
  1128. window.AWS.config.region = "cn-northwest-1"; //设置区域
  1129. var bucket = new window.AWS.S3({ params: { Bucket: "ccrb" } }); //选择桶
  1130. var _this = this;
  1131. if (file) {
  1132. var params = {
  1133. Key:
  1134. file.name.split(".")[0] +
  1135. new Date().getTime() +
  1136. "." +
  1137. file.name.split(".")[1],
  1138. ContentType: file.type,
  1139. Body: file,
  1140. "Access-Control-Allow-Credentials": "*",
  1141. ACL: "public-read",
  1142. }; //key可以设置为桶的相抵路径,Body为文件, ACL最好要设置
  1143. var options = {
  1144. partSize: 2048 * 1024 * 1024,
  1145. queueSize: 2,
  1146. leavePartsOnError: true,
  1147. };
  1148. bucket
  1149. .upload(params, options)
  1150. .on("httpUploadProgress", function (evt) {
  1151. //这里可以写进度条
  1152. // console.log("Uploaded : " + parseInt((evt.loaded * 80) / evt.total) + '%');
  1153. })
  1154. .send(function (err, data) {
  1155. loading.close();
  1156. if (err) {
  1157. var a = _this.$refs.upload1.uploadFiles;
  1158. a.splice(a.length - 1, a.length);
  1159. _this.$message.error("上传失败");
  1160. } else {
  1161. if (type == 2 || type == 3) {
  1162. _this.unitJson[unitIndex].chapterInfo[0].chapterData.push({
  1163. name: file.name,
  1164. url: data.Location,
  1165. uid: file.uid,
  1166. type: type,
  1167. });
  1168. _this.imgChange1(null, null, type);
  1169. } else if (type == 4) {
  1170. _this.unitJson[_this.unitIndex].chapterInfo[0].fileList1.push({
  1171. name: file.name,
  1172. url: data.Location,
  1173. uid: file.uid,
  1174. });
  1175. _this.imgChange1(null, null, type);
  1176. } else if (type == 5) {
  1177. _this.unitJson[
  1178. _this.unitIndex
  1179. ].chapterInfo[0].homeworkList.push({
  1180. name: file.name,
  1181. url: data.Location,
  1182. uid: file.uid,
  1183. });
  1184. _this.imgChange1(null, null, type);
  1185. }
  1186. console.log(data.Location);
  1187. }
  1188. });
  1189. }
  1190. },
  1191. addunit() {
  1192. this.unitJson.push({
  1193. dyName: "", //单元标题
  1194. startTime: "", //开始时间
  1195. endTime: "", //结束时间
  1196. isTalk: false, //是否开启评价
  1197. chapterInfo: [
  1198. {
  1199. isread: false,
  1200. chapterid: this.guid(),
  1201. title: "",
  1202. courseName: "",
  1203. chapterData: [],
  1204. itemCount: 1,
  1205. fileList1: [],
  1206. homeworkList: [],
  1207. video: [],
  1208. testData: [],
  1209. pData: [],
  1210. templateArray: [],
  1211. },
  1212. ],
  1213. });
  1214. },
  1215. add(e, i) {
  1216. var el = e.currentTarget;
  1217. el.getElementsByTagName("input")[0].click();
  1218. },
  1219. deleteHomeworkBox(unitIndex, index, i) {
  1220. this.unitJson[unitIndex].chapterInfo[index].homeworkList.splice(i, 1);
  1221. },
  1222. getStudent() {
  1223. let params = {
  1224. cn: this.searchPeople,
  1225. oid: this.oid,
  1226. uid: this.userid,
  1227. };
  1228. this.ajax
  1229. .get(this.$store.state.api + "selectProjectStudent", params)
  1230. .then((res) => {
  1231. this.studentJuri = res.data[0];
  1232. })
  1233. .catch((err) => {});
  1234. },
  1235. searchStudent() {
  1236. this.getStudent();
  1237. },
  1238. getChapterData(e, i, j, ic, type) {
  1239. e.stopPropagation();
  1240. this.updataC = true;
  1241. this.icc = ic;
  1242. if ((type == 2 || type == 3) && e.target.tagName !== "INPUT") {
  1243. console.log("还不能下载图片喔");
  1244. }
  1245. },
  1246. deleteChapterData(e, i, j, ic) {
  1247. // window.U.UF.EV.stopBubble();
  1248. e.stopPropagation();
  1249. this.unitJson[i].chapterInfo[j].chapterData.splice(ic, 1);
  1250. },
  1251. updataVideoT(e, i, j, ic) {
  1252. e.stopPropagation();
  1253. this.unitJson[i].chapterInfo[j].chapterData[ic].name = e.target.value;
  1254. },
  1255. upCd(e, i, j, ic) {
  1256. e.stopPropagation();
  1257. if (ic == 0) {
  1258. return;
  1259. }
  1260. var a = this.unitJson[i].chapterInfo[j].chapterData[ic - 1];
  1261. this.unitJson[i].chapterInfo[j].chapterData[ic - 1] =
  1262. this.unitJson[i].chapterInfo[j].chapterData[ic];
  1263. this.unitJson[i].chapterInfo[j].chapterData[ic] = a;
  1264. },
  1265. downCd(e, i, j, ic) {
  1266. e.stopPropagation();
  1267. if (ic == this.unitJson[i].chapterInfo[j].chapterData.length - 1) {
  1268. return;
  1269. }
  1270. var a = this.unitJson[i].chapterInfo[j].chapterData[ic + 1];
  1271. this.unitJson[i].chapterInfo[j].chapterData[ic + 1] =
  1272. this.unitJson[i].chapterInfo[j].chapterData[ic];
  1273. this.unitJson[i].chapterInfo[j].chapterData[ic] = a;
  1274. },
  1275. addWork() {
  1276. let params = [
  1277. {
  1278. uid: this.userid,
  1279. title: this.courseName,
  1280. brief: this.courseText.replace(/%/g, "%25"),
  1281. cover: this.cover.length > 0 ? JSON.stringify(this.cover) : "",
  1282. astudent:
  1283. this.checkboxList.length > 0
  1284. ? JSON.stringify(this.checkboxList)
  1285. : "",
  1286. see: this.isTeacherSee == true ? 0 : 1,
  1287. chapters: JSON.stringify(this.unitJson),
  1288. template: this.cTemplate,
  1289. },
  1290. ];
  1291. this.ajax
  1292. .post(this.$store.state.api + "addWork", params)
  1293. .then((res) => {
  1294. this.$message({
  1295. message: "新增成功",
  1296. type: "success",
  1297. });
  1298. this.number = res.data[0][0].ordernumber;
  1299. this.islogin = true;
  1300. })
  1301. .catch((err) => {
  1302. this.$message.error("新增失败");
  1303. console.error(err);
  1304. });
  1305. },
  1306. guid() {
  1307. var _num,
  1308. i,
  1309. _guid = "";
  1310. for (i = 0; i < 32; i++) {
  1311. _guid += Math.floor(Math.random() * 16).toString(16); //随机0 - 16 的数字 转变为16进制的字符串
  1312. _num = Math.floor((i - 7) / 4); //计算 (i-7)除4
  1313. if (_num > -1 && _num < 4 && i == 7 + 4 * _num) {
  1314. //会使guid中间加 "-" 形式为xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
  1315. _guid += "-";
  1316. }
  1317. }
  1318. return _guid;
  1319. },
  1320. insertWord() {
  1321. this.dialogVisible1 = true;
  1322. this.updateBoolean2 = false;
  1323. this.tTitle = "";
  1324. this.tdetail = "";
  1325. },
  1326. addWord() {
  1327. this.unitJson[this.unitIndex].chapterInfo[0].fileList1.push({
  1328. name: this.tTitle,
  1329. content: this.tdetail,
  1330. uid: this.guid(),
  1331. });
  1332. this.dialogVisible1 = false;
  1333. },
  1334. upWord() {},
  1335. selectWord(uid, i, c) {
  1336. this.dialogVisible1 = true;
  1337. this.updateBoolean2 = true;
  1338. if (
  1339. uid == this.unitJson[this.unitIndex].chapterInfo[i].fileList1[c].uid
  1340. ) {
  1341. this.tTitle =
  1342. this.unitJson[this.unitIndex].chapterInfo[i].fileList1[c].name;
  1343. this.tdetail =
  1344. this.unitJson[this.unitIndex].chapterInfo[i].fileList1[c].content;
  1345. }
  1346. },
  1347. isAddPP() {
  1348. if (this.checkboxList.length > 0) {
  1349. this.$message({
  1350. message: "添加成功",
  1351. type: "success",
  1352. });
  1353. this.dialogVisible3 = false;
  1354. } else {
  1355. this.$message({
  1356. message: "请添加项目成员",
  1357. type: "error",
  1358. });
  1359. }
  1360. },
  1361. getTemplate() {
  1362. this.ajax
  1363. .get(this.$store.state.api + "getTemplateT", "")
  1364. .then((res) => {
  1365. this.templateArray = res.data[0];
  1366. })
  1367. .catch((err) => {});
  1368. },
  1369. checkTemplate(res) {
  1370. this.templateC = res;
  1371. this.cTemplate = res.content;
  1372. },
  1373. wordNext() {
  1374. this.cTemplate = this.templateC.content;
  1375. this.steps++;
  1376. this.dialogVisible2 = false;
  1377. },
  1378. addPP() {
  1379. this.dialogVisible3 = true;
  1380. },
  1381. },
  1382. created() {
  1383. this.getStudent();
  1384. this.getTemplate();
  1385. },
  1386. };
  1387. </script>
  1388. <style scoped>
  1389. .dialog_diy >>> .el-dialog__header {
  1390. background: #3d67bc !important;
  1391. padding: 15px 20px;
  1392. }
  1393. .dialog_diy >>> .el-dialog__title {
  1394. color: #fff;
  1395. }
  1396. .dialog_diy >>> .el-dialog__headerbtn {
  1397. top: 19px;
  1398. }
  1399. .dialog_diy >>> .el-dialog__headerbtn .el-dialog__close {
  1400. color: #fff;
  1401. }
  1402. .dialog_diy >>> .el-dialog__headerbtn .el-dialog__close:hover {
  1403. color: #fff;
  1404. }
  1405. .left {
  1406. border-right: 1px solid rgb(60, 94, 143);
  1407. display: flex;
  1408. flex-direction: column;
  1409. align-items: center;
  1410. min-height: 600px;
  1411. width: 385px;
  1412. height: 80%;
  1413. }
  1414. .tips {
  1415. color: rgb(128, 128, 128);
  1416. font-size: 12px;
  1417. width: 270px;
  1418. margin: 40px;
  1419. }
  1420. .pb_content {
  1421. background: #fff;
  1422. height: 100%;
  1423. margin: 20px 20px 20px 20px;
  1424. }
  1425. .pb_content_body {
  1426. width: 100% !important;
  1427. height: 100%;
  1428. }
  1429. .info_solid {
  1430. width: 270px;
  1431. height: 30px;
  1432. border-left: 1px solid #bdbdbd;
  1433. margin: 10px 0px 10px 30px;
  1434. }
  1435. .info_steps {
  1436. width: 270px;
  1437. font-size: 0.875rem;
  1438. display: flex;
  1439. align-items: center;
  1440. }
  1441. .info_steps span:nth-child(1) {
  1442. width: 30px;
  1443. height: 30px;
  1444. background: rgba(0, 0, 0, 0.38);
  1445. display: block;
  1446. color: #fff;
  1447. border-radius: 40px;
  1448. text-align: center;
  1449. line-height: 30px;
  1450. }
  1451. .steps_active {
  1452. background: #3d67bc !important;
  1453. }
  1454. .info_steps span:nth-child(2) {
  1455. margin-left: 5px;
  1456. }
  1457. .right {
  1458. height: 100%;
  1459. width: 100%;
  1460. overflow: auto;
  1461. }
  1462. .basic_box {
  1463. width: 80%;
  1464. margin: 30px 0 0 60px;
  1465. position: relative;
  1466. }
  1467. .basic_box_success {
  1468. width: 80%;
  1469. min-height: 455px;
  1470. margin: 50px auto;
  1471. position: relative;
  1472. text-align: center;
  1473. border-bottom: 1px solid #bfbfbf;
  1474. }
  1475. .info_title {
  1476. font-size: 1.5em;
  1477. margin: 20px 30px 20px 30px;
  1478. }
  1479. .bInfo_title {
  1480. font-size: 16px;
  1481. text-align: left;
  1482. margin-top: 20px;
  1483. margin-bottom: 10px;
  1484. }
  1485. .small_title {
  1486. font-size: 14px;
  1487. line-height: 40px;
  1488. }
  1489. .binfo_input {
  1490. font: inherit;
  1491. color: currentColor;
  1492. width: 100%;
  1493. margin: 0;
  1494. padding: 15px 14px;
  1495. display: block;
  1496. min-width: 0;
  1497. outline: none;
  1498. box-sizing: content-box;
  1499. background: none;
  1500. -webkit-tap-highlight-color: transparent;
  1501. border: 1px solid rgba(0, 0, 0, 0.23);
  1502. border-radius: 4px;
  1503. box-sizing: border-box;
  1504. resize: none;
  1505. }
  1506. .binfo_input:focus-visible {
  1507. border: 1px solid rgba(61, 103, 188);
  1508. }
  1509. .chapter_beizhu {
  1510. font-size: 12px;
  1511. font-weight: bold;
  1512. float: right;
  1513. color: rgb(128, 128, 128);
  1514. margin-top: 5px;
  1515. }
  1516. .chapter_uploadBox1 {
  1517. text-align: left;
  1518. background-color: rgb(242, 242, 242);
  1519. width: 100%;
  1520. height: 67px;
  1521. padding: 0px 15px;
  1522. border-radius: 8px;
  1523. overflow: hidden;
  1524. font-size: 16px;
  1525. box-sizing: border-box;
  1526. position: relative;
  1527. }
  1528. .chapter_add {
  1529. width: 100%;
  1530. height: 32px;
  1531. margin-top: 15px;
  1532. cursor: pointer;
  1533. }
  1534. .chapter_add_l {
  1535. margin-left: 5px;
  1536. width: 30px;
  1537. height: 30px;
  1538. float: left;
  1539. border: 1px solid #aaa;
  1540. color: #aaa;
  1541. border-radius: 50%;
  1542. font-size: 25px;
  1543. text-align: center;
  1544. }
  1545. .chapter_add_r {
  1546. font-size: 18px;
  1547. height: 40px;
  1548. line-height: 30px;
  1549. text-indent: 10px;
  1550. color: #aaa;
  1551. }
  1552. .chapter_add_r span {
  1553. font-size: 12px;
  1554. color: rgb(204, 204, 204);
  1555. }
  1556. .chapter_add_input {
  1557. display: none;
  1558. }
  1559. .line {
  1560. width: 85%;
  1561. margin: 0 auto;
  1562. border-top: 1px solid #cecece;
  1563. margin-top: 20px;
  1564. }
  1565. .info_btnBox {
  1566. width: 100%;
  1567. display: flex;
  1568. justify-content: space-evenly;
  1569. margin: 20px 0 25px 0;
  1570. }
  1571. .info_btn,
  1572. .teacherWord {
  1573. color: #fff;
  1574. background-color: #6a8ed5;
  1575. padding: 8px 24px;
  1576. font-size: 0.9375rem;
  1577. box-shadow: 0px 1px 3px 0px rgb(0 0 0 / 20%), 0px 2px 2px 0px rgb(0 0 0 / 14%),
  1578. 0px 3px 1px -2px rgb(0 0 0 / 12%);
  1579. min-width: 64px;
  1580. font-weight: 500;
  1581. border-radius: 4px;
  1582. box-sizing: border-box;
  1583. border: none;
  1584. cursor: pointer;
  1585. }
  1586. .teacherWord {
  1587. width: 105px !important;
  1588. text-align: center !important;
  1589. line-height: 36px !important;
  1590. padding: 0 !important;
  1591. font-size: 14px !important;
  1592. margin: 10px 0 !important;
  1593. }
  1594. .wordTeacher {
  1595. display: flex;
  1596. flex-direction: column;
  1597. width: 20%;
  1598. text-align: center;
  1599. font-size: 14px;
  1600. margin: 30px 30px 0 10px;
  1601. background: #fff;
  1602. position: relative;
  1603. border-radius: 5px;
  1604. padding: 25px 0px;
  1605. }
  1606. .wordPic {
  1607. margin: 0 auto;
  1608. width: 60px;
  1609. height: 60px;
  1610. cursor: pointer;
  1611. }
  1612. .deleteWord {
  1613. width: 22px;
  1614. height: 22px;
  1615. position: absolute;
  1616. right: 20px;
  1617. top: -10px;
  1618. cursor: pointer;
  1619. }
  1620. .wordPic > img,
  1621. .deleteWord > img {
  1622. width: 100%;
  1623. height: 100%;
  1624. }
  1625. .info_btn:hover {
  1626. background-color: #4f7cd5 !important;
  1627. }
  1628. .cru_selectBox {
  1629. display: flex;
  1630. margin: 30px 0 10px;
  1631. flex-wrap: nowrap;
  1632. white-space: nowrap;
  1633. overflow: auto;
  1634. position: relative;
  1635. height: 47px;
  1636. }
  1637. .cru_selectBox::-webkit-scrollbar {
  1638. /*滚动条整体样式*/
  1639. width: 6px;
  1640. /*高宽分别对应横竖滚动条的尺寸*/
  1641. height: 6px;
  1642. }
  1643. /*定义滚动条轨道 内阴影+圆角*/
  1644. .cru_selectBox::-webkit-scrollbar-track {
  1645. border-radius: 10px;
  1646. background-color: #eee;
  1647. }
  1648. /*定义滑块 内阴影+圆角*/
  1649. .cru_selectBox::-webkit-scrollbar-thumb {
  1650. border-radius: 10px;
  1651. -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);
  1652. background-color: rgba(0, 0, 0, 0.1);
  1653. }
  1654. .cru_line {
  1655. position: absolute;
  1656. bottom: 0px;
  1657. transition: all 0.5s;
  1658. left: 0px;
  1659. width: 125px;
  1660. margin-left: -25px;
  1661. }
  1662. .cru_select {
  1663. font-size: 21px;
  1664. margin-right: 37px;
  1665. margin-left: 5px;
  1666. cursor: pointer;
  1667. color: #a6a6a6;
  1668. }
  1669. .cru_selected {
  1670. color: #0b7fc2 !important;
  1671. }
  1672. .chapter_contentbox {
  1673. display: flex;
  1674. align-items: center;
  1675. margin-top: 15px;
  1676. }
  1677. .chapter_contentbox div:nth-child(1) {
  1678. width: 150px;
  1679. margin: 0px;
  1680. font-size: 2em;
  1681. color: black;
  1682. display: block;
  1683. white-space: nowrap;
  1684. overflow: hidden;
  1685. text-overflow: ellipsis;
  1686. font-weight: 600;
  1687. }
  1688. .chapter_contentbox div:nth-child(2) {
  1689. width: 100%;
  1690. }
  1691. .chapter_contentbox div:nth-child(3) {
  1692. background-image: url(../../assets/remove.png);
  1693. cursor: pointer;
  1694. opacity: 0.5;
  1695. width: 40px;
  1696. height: 50px;
  1697. background-repeat: no-repeat;
  1698. background-position: 5px 10px;
  1699. }
  1700. .binfo_input {
  1701. font: inherit;
  1702. color: currentColor;
  1703. width: 100%;
  1704. margin: 0;
  1705. padding: 15px 14px;
  1706. display: block;
  1707. min-width: 0;
  1708. outline: none;
  1709. box-sizing: content-box;
  1710. background: none;
  1711. border: 1px solid rgba(0, 0, 0, 0.23);
  1712. border-radius: 4px;
  1713. box-sizing: border-box;
  1714. background: #fff;
  1715. }
  1716. .binfo_input:focus-visible {
  1717. border: 1px solid rgba(61, 103, 188);
  1718. }
  1719. .time {
  1720. display: flex;
  1721. margin-top: 35px;
  1722. }
  1723. .chapter_btnbox {
  1724. width: 160px;
  1725. border-radius: 5px;
  1726. border: 2px dashed gray;
  1727. display: flex;
  1728. padding: 8px 50px;
  1729. align-items: center;
  1730. justify-content: center;
  1731. margin: 30px auto 0;
  1732. cursor: pointer;
  1733. }
  1734. .icon_add {
  1735. position: relative;
  1736. width: 24px;
  1737. padding-top: 20px;
  1738. border-radius: 100%;
  1739. border-width: 2px;
  1740. border-style: solid;
  1741. border-color: gray;
  1742. }
  1743. .icon_add i:nth-child(1) {
  1744. position: absolute;
  1745. left: 50%;
  1746. top: 50%;
  1747. height: 60%;
  1748. transform: translate(-50%, -50%);
  1749. border-width: 1px;
  1750. border-style: solid;
  1751. border-color: inherit;
  1752. }
  1753. .icon_add i:nth-child(2) {
  1754. position: absolute;
  1755. top: 50%;
  1756. left: 50%;
  1757. width: 60%;
  1758. transform: translate(-50%, -50%);
  1759. border-width: 1px;
  1760. border-style: solid;
  1761. border-color: inherit;
  1762. }
  1763. .chapter_btn_w {
  1764. font-size: 0.9375rem;
  1765. font-weight: bold;
  1766. color: gray;
  1767. margin-left: 20px;
  1768. }
  1769. .disUoloadSty >>> .el-upload--picture-card {
  1770. display: none; /* 上传按钮隐藏 */
  1771. }
  1772. .imgLeft {
  1773. margin: 15px 0;
  1774. }
  1775. .add_info_box {
  1776. margin: 20px 0;
  1777. }
  1778. .add_info_box button {
  1779. margin: 0 10px 10px 0;
  1780. }
  1781. .add_chapters_box {
  1782. text-align: left;
  1783. background-color: rgb(242, 242, 242);
  1784. width: 100%;
  1785. padding: 0px 15px;
  1786. border-radius: 8px;
  1787. font-size: 16px;
  1788. box-sizing: border-box;
  1789. position: relative;
  1790. padding: 0 10px 5px 10px;
  1791. height: 185px;
  1792. overflow-y: auto;
  1793. overflow-x: hidden;
  1794. }
  1795. .homework_box {
  1796. display: flex;
  1797. align-items: center;
  1798. flex-wrap: wrap;
  1799. margin: 15px 0 0 0;
  1800. }
  1801. .course_homework {
  1802. display: flex;
  1803. justify-content: center;
  1804. flex-direction: row;
  1805. align-items: center;
  1806. margin: 0 10px 0 0;
  1807. }
  1808. .course_homework >>> .el-input__inner {
  1809. width: 140px;
  1810. margin-left: 15px;
  1811. }
  1812. .chapter_upload_move {
  1813. position: relative;
  1814. background-color: #fff;
  1815. position: absolute;
  1816. width: 100%;
  1817. top: 0px;
  1818. left: 0px;
  1819. border: 1px solid #eee;
  1820. border-radius: 5px;
  1821. transition: width 2s;
  1822. -moz-transition: width 2s;
  1823. -webkit-transition: width 2s;
  1824. -o-transition: width 2s;
  1825. }
  1826. .chapter_upload_l_i {
  1827. background-image: url("../../assets/icon.png");
  1828. background-position: 3px -165px;
  1829. width: 30px;
  1830. height: 30px;
  1831. margin: 10px auto 0 auto;
  1832. }
  1833. .big_box {
  1834. display: flex;
  1835. }
  1836. .left_first,
  1837. .right_first {
  1838. display: flex;
  1839. flex-direction: column;
  1840. width: 50%;
  1841. }
  1842. .right_first {
  1843. margin-left: 60px;
  1844. }
  1845. .people {
  1846. border: 1px solid rgb(229 229 229);
  1847. height: 495px;
  1848. border-radius: 5px;
  1849. width: 100%;
  1850. overflow: auto;
  1851. }
  1852. .people_top {
  1853. display: flex;
  1854. width: 100%;
  1855. justify-content: space-between;
  1856. align-items: center;
  1857. }
  1858. .people_nav,
  1859. .people_top_right {
  1860. padding: 20px 0 0 20px;
  1861. }
  1862. .people_search {
  1863. display: flex;
  1864. position: relative;
  1865. }
  1866. .people_search >>> .el-input__inner {
  1867. height: 25px;
  1868. width: 95%;
  1869. }
  1870. .search_img {
  1871. width: 20px;
  1872. height: 20px;
  1873. position: absolute;
  1874. right: 15px;
  1875. top: 3px;
  1876. }
  1877. .search_img > img {
  1878. width: 100%;
  1879. height: 100%;
  1880. }
  1881. .people_name {
  1882. display: flex;
  1883. justify-content: flex-start;
  1884. padding: 20px 0 0 25px;
  1885. flex-direction: column;
  1886. flex-wrap: wrap;
  1887. }
  1888. .people_name >>> .el-checkbox {
  1889. width: 100%;
  1890. display: flex;
  1891. align-items: center;
  1892. margin-bottom: 10px;
  1893. }
  1894. .people_name >>> .el-checkbox__label {
  1895. text-overflow: ellipsis;
  1896. overflow: hidden;
  1897. width: 100%;
  1898. }
  1899. .right_img {
  1900. width: 150px;
  1901. height: 150px;
  1902. margin: 0 auto;
  1903. }
  1904. .right_img > img {
  1905. width: 100%;
  1906. height: 100%;
  1907. }
  1908. .number {
  1909. margin-top: 20px;
  1910. color: #4aa6ff;
  1911. text-decoration: underline;
  1912. }
  1913. .success_button {
  1914. display: flex;
  1915. text-align: center;
  1916. margin: 5% 0 auto;
  1917. flex-direction: row;
  1918. justify-content: center;
  1919. }
  1920. .look_course {
  1921. margin-right: 40px;
  1922. background: #3d67bc;
  1923. width: 200px;
  1924. height: 35px;
  1925. line-height: 35px;
  1926. color: #fff;
  1927. text-align: center;
  1928. font-size: 14px;
  1929. border-radius: 5px;
  1930. cursor: pointer;
  1931. }
  1932. .attend_others {
  1933. width: 250px;
  1934. background: #4fb13c;
  1935. height: 35px;
  1936. line-height: 35px;
  1937. color: #fff;
  1938. text-align: center;
  1939. font-size: 14px;
  1940. border-radius: 5px;
  1941. cursor: pointer;
  1942. }
  1943. .dialog_diy2 >>> .el-dialog__body {
  1944. text-align: center;
  1945. }
  1946. .write_togother {
  1947. position: absolute;
  1948. right: 45px;
  1949. display: flex;
  1950. top: 5%;
  1951. }
  1952. .write_people {
  1953. font-size: 14px;
  1954. line-height: 50px;
  1955. padding-right: 10px;
  1956. }
  1957. .end_write {
  1958. background: #3d67bc;
  1959. color: #fff;
  1960. width: 100px;
  1961. height: 35px;
  1962. line-height: 35px;
  1963. text-align: center;
  1964. font-size: 14px;
  1965. border-radius: 5px;
  1966. cursor: pointer;
  1967. }
  1968. .chapter_upload {
  1969. height: 50px;
  1970. margin-top: 8px;
  1971. position: relative;
  1972. }
  1973. .chapter_upload_t {
  1974. background-color: #e3f3ff;
  1975. position: absolute;
  1976. width: 0%;
  1977. height: 100%;
  1978. top: 0px;
  1979. left: 0px;
  1980. }
  1981. .chapter_upload_o {
  1982. width: 100%;
  1983. height: 100%;
  1984. position: relative;
  1985. z-index: 1;
  1986. }
  1987. .chapter_upload_l {
  1988. width: 50px;
  1989. height: 50px;
  1990. border-right: 1px solid #eee;
  1991. float: left;
  1992. }
  1993. .chapter_upload_ic {
  1994. height: 30px;
  1995. float: right;
  1996. }
  1997. .chapter_upload_ic_l {
  1998. width: 50px;
  1999. height: 50px;
  2000. float: left;
  2001. border-right: 1px solid #eee;
  2002. }
  2003. .chapter_upload_ic_l div {
  2004. width: 30px;
  2005. height: 35px;
  2006. background: url("../../assets/icon/icon.png");
  2007. margin: 10px auto 0 auto;
  2008. }
  2009. .chapter_upload_ic_r {
  2010. width: 40px;
  2011. height: 40px;
  2012. float: left;
  2013. margin-left: 5px;
  2014. }
  2015. .chapter_upload_ic_r div {
  2016. width: 30px;
  2017. height: 30px;
  2018. background-image: url("../../assets/icon/icon.png");
  2019. background-position: -39px -163px;
  2020. margin: 10px auto 0 auto;
  2021. }
  2022. .chapter_upload_n {
  2023. height: 20px;
  2024. line-height: 20px;
  2025. text-indent: 10px;
  2026. text-decoration: none;
  2027. text-overflow: ellipsis;
  2028. white-space: nowrap;
  2029. overflow: hidden;
  2030. position: absolute;
  2031. width: 100%;
  2032. top: 40%;
  2033. left: 5%;
  2034. }
  2035. .chapter_upload_l_i1 {
  2036. background-image: url("../../assets/icon/video.png");
  2037. width: 28px;
  2038. height: 28px;
  2039. margin: 10px auto 0 auto;
  2040. background-size: 100% 100%;
  2041. }
  2042. .chapter_upload_l_i5 {
  2043. background-image: url("../../assets/icon/word.png");
  2044. width: 24px;
  2045. height: 24px;
  2046. margin: 10px auto 0 auto;
  2047. background-size: 100% 100%;
  2048. }
  2049. .chapter_upload_ud {
  2050. display: flex;
  2051. flex-direction: column;
  2052. margin-left: 5px;
  2053. }
  2054. .chapter_upload_up {
  2055. background-image: url("../../assets/icon/up.png");
  2056. width: 17px;
  2057. height: 15px;
  2058. background-size: 100% 100%;
  2059. cursor: pointer;
  2060. }
  2061. .chapter_upload_down {
  2062. background-image: url("../../assets/icon/down.png");
  2063. width: 17px;
  2064. height: 15px;
  2065. margin: 2px auto 0 auto;
  2066. background-size: 100% 100%;
  2067. cursor: pointer;
  2068. }
  2069. .addWordStyle {
  2070. display: flex;
  2071. flex-direction: row;
  2072. justify-content: flex-start;
  2073. overflow-x: auto;
  2074. white-space: nowrap;
  2075. flex-wrap: wrap;
  2076. }
  2077. /* table 样式 */
  2078. .cont >>> table {
  2079. border-top: 1px solid #ccc;
  2080. border-left: 1px solid #ccc;
  2081. }
  2082. .cont >>> table td,
  2083. .cont >>> table th {
  2084. border-bottom: 1px solid #ccc;
  2085. border-right: 1px solid #ccc;
  2086. padding: 3px 5px;
  2087. }
  2088. .cont >>> table th {
  2089. border-bottom: 2px solid #ccc;
  2090. text-align: center;
  2091. }
  2092. /* blockquote 样式 */
  2093. .cont >>> blockquote {
  2094. display: block;
  2095. border-left: 8px solid #d0e5f2;
  2096. padding: 5px 10px;
  2097. margin: 10px 0;
  2098. line-height: 1.4;
  2099. font-size: 100%;
  2100. background-color: #f1f1f1;
  2101. }
  2102. /* code 样式 */
  2103. .cont >>> code {
  2104. display: inline-block;
  2105. *display: inline;
  2106. *zoom: 1;
  2107. background-color: #f1f1f1;
  2108. border-radius: 3px;
  2109. padding: 3px 5px;
  2110. margin: 0 3px;
  2111. }
  2112. .cont >>> pre code {
  2113. display: block;
  2114. }
  2115. /* ul ol 样式 */
  2116. .cont >>> ul,
  2117. ol {
  2118. margin: 10px 0 10px 20px;
  2119. }
  2120. .wordbox {
  2121. display: flex;
  2122. flex-wrap: wrap;
  2123. cursor: pointer;
  2124. width: 100%;
  2125. }
  2126. .checkword {
  2127. width: 22px;
  2128. height: 22px;
  2129. margin: 10px auto 0;
  2130. cursor: pointer;
  2131. }
  2132. .checkword img {
  2133. width: 100%;
  2134. }
  2135. .stepBg {
  2136. margin: 0 25px 0 25px;
  2137. width: 17%;
  2138. border-radius: 10px;
  2139. display: flex;
  2140. flex-direction: column;
  2141. justify-content: flex-start;
  2142. align-items: center;
  2143. flex-wrap: nowrap;
  2144. }
  2145. .stepBg > div {
  2146. height: 12%;
  2147. width: 85%;
  2148. cursor: pointer;
  2149. margin: 10px 0;
  2150. border-radius: 10px;
  2151. }
  2152. .first,
  2153. .second,
  2154. .third,
  2155. .four {
  2156. background: #4a83d0;
  2157. height: 90px;
  2158. color: #fff;
  2159. display: flex;
  2160. flex-direction: row;
  2161. align-items: center;
  2162. justify-content: center;
  2163. }
  2164. .first > div:nth-child(1),
  2165. .second > div:nth-child(1),
  2166. .third > div:nth-child(1),
  2167. .four > div:nth-child(1) {
  2168. margin: 5px 10px 0 0;
  2169. width: 2rem;
  2170. }
  2171. .firstNo,
  2172. .secondNo,
  2173. .thirdNo,
  2174. .fourNo {
  2175. background: #e7e7e7;
  2176. height: 90px;
  2177. color: #adadad;
  2178. display: flex;
  2179. flex-direction: row;
  2180. align-items: center;
  2181. justify-content: center;
  2182. }
  2183. .firstNo > div:nth-child(1),
  2184. .secondNo > div:nth-child(1),
  2185. .thirdNo > div:nth-child(1),
  2186. .fourNo > div:nth-child(1) {
  2187. margin: 5px 10px 0 0;
  2188. width: 2rem;
  2189. }
  2190. .uploadWidth >>> .el-upload {
  2191. width: 60px;
  2192. height: 60px;
  2193. position: relative;
  2194. }
  2195. .addPeople {
  2196. background: #fa6060;
  2197. width: 135px;
  2198. height: 40px;
  2199. color: #fff;
  2200. border-radius: 5px;
  2201. text-align: center;
  2202. line-height: 40px;
  2203. font-size: 15px;
  2204. cursor: pointer;
  2205. }
  2206. .kcImg {
  2207. width: 60px;
  2208. margin-left: 10px;
  2209. }
  2210. .zyImg {
  2211. width: 55px;
  2212. margin: 0 10px;
  2213. }
  2214. .deleteZy {
  2215. width: 20px;
  2216. position: absolute;
  2217. top: 5px;
  2218. right: 5px;
  2219. cursor: pointer;
  2220. }
  2221. .kcImg > img,
  2222. .zyImg > img,
  2223. .deleteZy > img {
  2224. width: 100%;
  2225. height: 100%;
  2226. }
  2227. .zyBox {
  2228. display: flex;
  2229. flex-direction: row;
  2230. align-items: center;
  2231. background: #67d37d;
  2232. color: #fff;
  2233. width: 210px;
  2234. margin-left: 20px;
  2235. border-radius: 10px;
  2236. height: 70px;
  2237. position: relative;
  2238. }
  2239. .upCss {
  2240. display: flex;
  2241. flex-direction: row;
  2242. justify-content: flex-start;
  2243. }
  2244. .upCss >>> .el-upload {
  2245. margin-right: 30px;
  2246. }
  2247. .upCss >>> .el-icon-plus {
  2248. position: none !important;
  2249. width: 100px;
  2250. height: 100px;
  2251. display: flex;
  2252. flex-wrap: nowrap;
  2253. flex-direction: column;
  2254. align-items: center;
  2255. justify-content: center;
  2256. border: 1px dashed #ccc;
  2257. min-width: 78px;
  2258. min-height: 100px;
  2259. z-index: 999;
  2260. }
  2261. .addStageImg {
  2262. width: 30px;
  2263. height: 30px;
  2264. cursor: pointer;
  2265. margin-top: 20px;
  2266. }
  2267. .addHW {
  2268. width: 70px;
  2269. height: 70px;
  2270. cursor: pointer;
  2271. }
  2272. .addStageImg > img,
  2273. .addHW > img {
  2274. width: 100%;
  2275. height: 100%;
  2276. }
  2277. .addNewPP >>> .el-dialog__body {
  2278. padding: 5px 20px;
  2279. }
  2280. .isHeight {
  2281. height: 680px;
  2282. }
  2283. .customWidth >>> .el-dialog{
  2284. min-width:500px !important;
  2285. }
  2286. </style>