raceOverview.vue 54 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762
  1. <template>
  2. <!-- 项目概况 -->
  3. <div class="pb_content">
  4. <div class="race_content_body">
  5. <div class="raceBox">
  6. <div class="stepBg">
  7. <!-- <div class="steps">
  8. <div>
  9. <img src="../../../../assets/icon/race/progress.png" alt="" />
  10. </div>
  11. <div class="stepRightNav">
  12. <div>项目简介</div>
  13. <div>说明</div>
  14. </div>
  15. </div> -->
  16. <div class="steps">
  17. <div>
  18. <img src="../../../../assets/icon/race/progress.png" alt="" />
  19. </div>
  20. <div class="stepRightNav" @click="jump('first')">
  21. <div>驱动问题</div>
  22. <div class="isFinishCss" v-if="raceOver.driQuestion.brief != ''">
  23. <div class="isFinish">
  24. <img src="../../../../assets/icon/race/finish.png" alt="" />
  25. </div>
  26. <div>已填写</div>
  27. </div>
  28. </div>
  29. </div>
  30. <div class="steps">
  31. <div>
  32. <img src="../../../../assets/icon/race/progress.png" alt="" />
  33. </div>
  34. <div class="stepRightNav" @click="jump('second')">
  35. <div>学习目标</div>
  36. <div class="isFinishCss" v-if="raceOver.tarDesign.brief != ''">
  37. <div class="isFinish">
  38. <img src="../../../../assets/icon/race/finish.png" alt="" />
  39. </div>
  40. <div>已填写</div>
  41. </div>
  42. </div>
  43. </div>
  44. <div class="steps">
  45. <div>
  46. <img src="../../../../assets/icon/race/progress.png" alt="" />
  47. </div>
  48. <div class="stepRightNav" @click="jump('third')">
  49. <div>评价设计</div>
  50. <div class="isFinishCss" v-if="raceOver.actiDesign.brief != ''">
  51. <div class="isFinish">
  52. <img src="../../../../assets/icon/race/finish.png" alt="" />
  53. </div>
  54. <div>已填写</div>
  55. </div>
  56. </div>
  57. </div>
  58. <!-- <div class="steps">
  59. <div>
  60. <img src="../../../../assets/icon/race/progress.png" alt="" />
  61. </div>
  62. <div class="stepRightNav">
  63. <div>平台案例实施(选填)</div>
  64. <div>协同人员</div>
  65. </div>
  66. </div>
  67. <div class="steps">
  68. <div>
  69. <img src="../../../../assets/icon/race/progress.png" alt="" />
  70. </div>
  71. <div class="stepRightNav">
  72. <div>案例评审</div>
  73. <div>评审状态、反馈</div>
  74. </div>
  75. </div> -->
  76. </div>
  77. <div class="right">
  78. <div class="whiteBg">
  79. <div class="firstTop">
  80. <div class="right_title" id="first">驱动问题</div>
  81. <!-- <div class="rightNav">
  82. 可包括阶段性问题和学科问题:阶段性问题是指在核心问题解决的不同阶段,通过提出驱动性问题,明确阶段子任务。学科问题是指从不同学科的角度以及分解和提出要研究解决的主要问题。
  83. </div> -->
  84. </div>
  85. <div class="basic_box1">
  86. <div class="editorCss">
  87. <editor-bar
  88. v-model="raceOver.driQuestion.brief"
  89. @change="upRaceOver"
  90. :placeholder="'问题贯穿项⽬式学习始终。在项⽬实践过程中,围绕项⽬核⼼问题的探究,拆分出若⼲⼦问题,进⽽明确项⽬的不同阶段及其⼦任务。另外,还要从学科的⻆度,结合学科核⼼概念以及学科独特的核⼼思想⽅法,分解和提出要研究解决的驱动问题。如果项⽬是跨学科探究,则需要考虑到不同学科视⻆及跨学科⼤概念。'"
  91. ></editor-bar>
  92. <div
  93. class="fullCss"
  94. @click="
  95. fullTools(
  96. raceOver.driQuestion.brief,
  97. 1,
  98. '问题贯穿项⽬式学习始终。在项⽬实践过程中,围绕项⽬核⼼问题的探究,拆分出若⼲⼦问题,进⽽明确项⽬的不同阶段及其⼦任务。另外,还要从学科的⻆度,结合学科核⼼概念以及学科独特的核⼼思想⽅法,分解和提出要研究解决的驱动问题。如果项⽬是跨学科探究,则需要考虑到不同学科视⻆及跨学科⼤概念。'
  99. )
  100. "
  101. >
  102. 全屏编辑
  103. <!-- <img
  104. src="../../../../assets/full.png"
  105. class="full"
  106. @click="
  107. fullTools(
  108. raceOver.driQuestion.brief,
  109. 1,
  110. '可包括阶段性问题和学科问题:阶段性问题是指在核心问题解决的不同阶段,通过提出驱动性问题,明确阶段子任务。学科问题是指从不同学科的角度以及分解和提出要研究解决的主要问题。'
  111. )
  112. "
  113. /> -->
  114. </div>
  115. </div>
  116. <div>
  117. <div class="basic_box">
  118. <!-- <div class="lineBox">
  119. <div class="lineTitle">附件内容</div>
  120. <div class="strLine"></div>
  121. </div> -->
  122. <div>
  123. <div
  124. class="add_chapters_box"
  125. v-if="
  126. raceOver.driQuestion.data &&
  127. raceOver.driQuestion.data.length == 0
  128. "
  129. ></div>
  130. <div
  131. v-else
  132. class="add_chapters_box"
  133. style="display: flex; flex-direction: column"
  134. >
  135. <transition-group tag="div">
  136. <div
  137. class="chapter_upload"
  138. v-for="(item, index) in raceOver.driQuestion.data"
  139. :key="item.id"
  140. draggable="true"
  141. @dragstart="handleDragStart($event, item)"
  142. @dragover.prevent="handleDragOver($event, item)"
  143. @dragenter="handleDragEnter($event, item)"
  144. @dragend="handleDragEnd($event, item, 0)"
  145. >
  146. <div class="chapter_upload_t"></div>
  147. <div class="chapter_upload_o">
  148. <div class="chapter_upload_l">
  149. <div
  150. v-if="item.type == 2"
  151. class="chapter_upload_l_i1"
  152. ></div>
  153. <div
  154. v-if="item.type == 1 || item.type == 3"
  155. class="chapter_upload_l_i5"
  156. ></div>
  157. </div>
  158. <div class="chapter_upload_ic">
  159. <div class="chapter_upload_ic_l"></div>
  160. <div
  161. class="chapter_upload_ic_r"
  162. @click.stop="
  163. deleteChapterData($event, index, 0)
  164. "
  165. >
  166. <div></div>
  167. </div>
  168. </div>
  169. <div class="chapter_upload_n">
  170. <input
  171. class="first"
  172. v-if="item.type == 1 || item.type == 3"
  173. :placeholder="item.name"
  174. />
  175. <input
  176. class="first"
  177. v-if="item.type == 2"
  178. :placeholder="item.name"
  179. />
  180. <div class="chapter_upload_ud">
  181. <div
  182. class="chapter_upload_up"
  183. @click="upCd($event, index, 0)"
  184. ></div>
  185. <div
  186. class="chapter_upload_down"
  187. @click="downCd($event, index, 0)"
  188. ></div>
  189. </div>
  190. </div>
  191. </div>
  192. </div>
  193. </transition-group>
  194. </div>
  195. </div>
  196. <div class="add_info_box">
  197. <div class="upTips">
  198. <button class="info_btn" @click="addImg($event)">
  199. 上传附件
  200. <input
  201. type="file"
  202. accept="application/pdf, application/.ppt, .ppt, .pptx, .xlsx, .xls, application/msword, application/vnd.openxmlformats-officedocument.wordprocessingml.document,video/mp4, video/quicktime, video/x-msvideo,image/*"
  203. style="display: none"
  204. @change="beforeUpload($event, null, 0)"
  205. />
  206. </button>
  207. <div>
  208. 上传文件PPT、Word限制为10M,Excel、PDF上传限制为5M,其他文件不限制大小。
  209. </div>
  210. </div>
  211. </div>
  212. <div v-if="raceOver.driQuestion.data.proVisible" class="mask">
  213. <div class="progressBox">
  214. <!-- <div id="closePro" class="closeCss">
  215. <img
  216. src="../../../../assets/icon/proClose.png"
  217. alt=""
  218. />
  219. </div> -->
  220. <div class="lbox">
  221. <img
  222. src="../../../../assets/loading.gif"
  223. />上传中,请稍后
  224. </div>
  225. <div>
  226. <div>
  227. {{ raceOver.driQuestion.data.isFinishSize }}M /
  228. {{
  229. raceOver.driQuestion.data.isAllSize
  230. ? raceOver.driQuestion.data.isAllSize
  231. : 0
  232. }}M
  233. </div>
  234. </div>
  235. <el-progress
  236. :text-inside="true"
  237. :stroke-width="20"
  238. :percentage="
  239. raceOver.driQuestion.data.progress
  240. ? raceOver.driQuestion.data.progress
  241. : 0
  242. "
  243. style="width: 80%"
  244. ></el-progress>
  245. </div>
  246. </div>
  247. </div>
  248. </div>
  249. </div>
  250. </div>
  251. <div class="whiteBg">
  252. <div class="firstTop">
  253. <div class="right_title" id="second">学习目标</div>
  254. <!-- <div class="rightNav">
  255. 学习目标提倡用核心素养来分类概括再描述,具体表述时应行为化、具体化、操作化,可以用“通过什么,达到什么,培养什么”的句式来进行表述
  256. </div> -->
  257. </div>
  258. <div class="basic_box1">
  259. <div class="editorCss">
  260. <editor-bar
  261. v-model="raceOver.tarDesign.brief"
  262. @change="upRaceOver"
  263. :placeholder="'学习目标提倡用核心素养来分类概括再描述,具体表述时应行为化、具体化、操作化,可以用“通过什么,达到什么,培养什么”的句式来进行表述。'"
  264. ></editor-bar>
  265. <div
  266. class="fullCss"
  267. @click="
  268. fullTools(
  269. raceOver.tarDesign.brief,
  270. 2,
  271. '学习目标提倡用核心素养来分类概括再描述,具体表述时应行为化、具体化、操作化,可以用“通过什么,达到什么,培养什么”的句式来进行表述。'
  272. )
  273. "
  274. >
  275. 全屏编辑
  276. <!-- <img
  277. src="../../../../assets/full.png"
  278. class="full"
  279. @click="
  280. fullTools(
  281. raceOver.tarDesign.brief,
  282. 2,
  283. '学习目标提倡用核心素养来分类概括再描述,具体表述时应行为化、具体化、操作化,可以用“通过什么,达到什么,培养什么”的句式来进行表述'
  284. )
  285. "
  286. /> -->
  287. </div>
  288. </div>
  289. <div>
  290. <div class="basic_box">
  291. <div class="lineBox">
  292. <div class="lineTitle">附件内容</div>
  293. <div class="strLine"></div>
  294. </div>
  295. <div>
  296. <div
  297. class="add_chapters_box"
  298. v-if="
  299. raceOver.tarDesign.data &&
  300. raceOver.tarDesign.data.length == 0
  301. "
  302. ></div>
  303. <div
  304. v-else
  305. class="add_chapters_box"
  306. style="display: flex; flex-direction: column"
  307. >
  308. <transition-group tag="div">
  309. <div
  310. class="chapter_upload"
  311. v-for="(item1, index1) in raceOver.tarDesign.data"
  312. :key="item1.id"
  313. draggable="true"
  314. @dragstart="handleDragStart($event, item1)"
  315. @dragover.prevent="handleDragOver($event, item1)"
  316. @dragenter="handleDragEnter($event, item1)"
  317. @dragend="handleDragEnd($event, item1, 1)"
  318. >
  319. <div class="chapter_upload_t"></div>
  320. <div class="chapter_upload_o">
  321. <div class="chapter_upload_l">
  322. <div
  323. v-if="item1.type == 2"
  324. class="chapter_upload_l_i1"
  325. ></div>
  326. <div
  327. v-if="item1.type == 1 || item1.type == 3"
  328. class="chapter_upload_l_i5"
  329. ></div>
  330. </div>
  331. <div class="chapter_upload_ic">
  332. <div class="chapter_upload_ic_l"></div>
  333. <div
  334. class="chapter_upload_ic_r"
  335. @click.stop="
  336. deleteChapterData($event, index1, 1)
  337. "
  338. >
  339. <div></div>
  340. </div>
  341. </div>
  342. <div class="chapter_upload_n">
  343. <input
  344. class="first"
  345. v-if="item1.type == 1 || item1.type == 3"
  346. :placeholder="item1.name"
  347. />
  348. <input
  349. class="first"
  350. v-if="item1.type == 2"
  351. :placeholder="item1.name"
  352. />
  353. <div class="chapter_upload_ud">
  354. <div
  355. class="chapter_upload_up"
  356. @click="upCd($event, index1, 1)"
  357. ></div>
  358. <div
  359. class="chapter_upload_down"
  360. @click="downCd($event, index1, 1)"
  361. ></div>
  362. </div>
  363. </div>
  364. </div>
  365. </div>
  366. </transition-group>
  367. </div>
  368. </div>
  369. <div class="add_info_box">
  370. <div class="upTips">
  371. <button class="info_btn" @click="addImg($event)">
  372. 上传附件
  373. <input
  374. type="file"
  375. accept="application/pdf, application/.ppt, .ppt, .pptx, .xlsx, .xls, application/msword, application/vnd.openxmlformats-officedocument.wordprocessingml.document,video/mp4, video/quicktime, video/x-msvideo,image/*"
  376. style="display: none"
  377. @change="beforeUpload($event, null, 1)"
  378. />
  379. </button>
  380. <div>
  381. 上传文件PPT、Word限制为10M,Excel、PDF上传限制为5M,其他文件不限制大小。
  382. </div>
  383. </div>
  384. </div>
  385. <div v-if="raceOver.tarDesign.data.proVisible" class="mask">
  386. <div class="progressBox">
  387. <!-- <div id="closePro1" class="closeCss">
  388. <img
  389. src="../../../../assets/icon/proClose.png"
  390. alt=""
  391. />
  392. </div> -->
  393. <div class="lbox">
  394. <img
  395. src="../../../../assets/loading.gif"
  396. />上传中,请稍后
  397. </div>
  398. <div>
  399. <div>
  400. {{ raceOver.tarDesign.data.isFinishSize }}M /
  401. {{
  402. raceOver.tarDesign.data.isAllSize
  403. ? raceOver.tarDesign.data.isAllSize
  404. : 0
  405. }}M
  406. </div>
  407. </div>
  408. <el-progress
  409. :text-inside="true"
  410. :stroke-width="20"
  411. :percentage="
  412. raceOver.tarDesign.data.progress
  413. ? raceOver.tarDesign.data.progress
  414. : 0
  415. "
  416. style="width: 80%"
  417. ></el-progress>
  418. </div>
  419. </div>
  420. </div>
  421. </div>
  422. </div>
  423. </div>
  424. <div class="whiteBg">
  425. <div class="firstTop">
  426. <div class="right_title" id="third">评价设计</div>
  427. <!-- <div class="rightNav">
  428. 项目学习评价方式需要体现过程性评价与总结性评价相结合,积极使用表现性评价。本次征集案例中,需要将学生的作品和报告作为附件呈现作品评价。
  429. </div> -->
  430. </div>
  431. <div class="basic_box1">
  432. <div class="editorCss">
  433. <editor-bar
  434. v-model="raceOver.actiDesign.brief"
  435. @change="upRaceOver"
  436. :placeholder="'项目学习评价方式需要体现过程性评价与总结性评价相结合,积极使用表现性评价。本次征集案例中,需要将学生的作品和报告作为附件呈现作品评价。'"
  437. ></editor-bar>
  438. <div
  439. class="fullCss"
  440. @click="
  441. fullTools(
  442. raceOver.actiDesign.brief,
  443. 3,
  444. '项目学习评价方式需要体现过程性评价与总结性评价相结合,积极使用表现性评价。本次征集案例中,需要将学生的作品和报告作为附件呈现作品评价。'
  445. )
  446. "
  447. >
  448. 全屏编辑
  449. <!-- <img
  450. src="../../../../assets/full.png"
  451. class="full"
  452. @click="
  453. fullTools(
  454. raceOver.actiDesign.brief,
  455. 3,
  456. '项目学习评价方式需要体现过程性评价与总结性评价相结合,积极使用表现性评价。本次征集案例中,需要将学生的作品和报告作为附件呈现作品评价。'
  457. )
  458. "
  459. /> -->
  460. </div>
  461. </div>
  462. <div>
  463. <div class="basic_box">
  464. <div class="lineBox">
  465. <div class="lineTitle">附件内容</div>
  466. <div class="strLine"></div>
  467. </div>
  468. <div>
  469. <div
  470. class="add_chapters_box"
  471. v-if="
  472. raceOver.actiDesign.data &&
  473. raceOver.actiDesign.data.length == 0
  474. "
  475. ></div>
  476. <div
  477. v-else
  478. class="add_chapters_box"
  479. style="display: flex; flex-direction: column"
  480. >
  481. <transition-group tag="div">
  482. <div
  483. class="chapter_upload"
  484. v-for="(item2, index2) in raceOver.actiDesign.data"
  485. :key="item2.id"
  486. draggable="true"
  487. @dragstart="handleDragStart($event, item2)"
  488. @dragover.prevent="handleDragOver($event, item2)"
  489. @dragenter="handleDragEnter($event, item2)"
  490. @dragend="handleDragEnd($event, item2, 2)"
  491. >
  492. <div class="chapter_upload_t"></div>
  493. <div class="chapter_upload_o">
  494. <div class="chapter_upload_l">
  495. <div
  496. v-if="item2.type == 2"
  497. class="chapter_upload_l_i1"
  498. ></div>
  499. <div
  500. v-if="item2.type == 1 || item2.type == 3"
  501. class="chapter_upload_l_i5"
  502. ></div>
  503. </div>
  504. <div class="chapter_upload_ic">
  505. <div class="chapter_upload_ic_l"></div>
  506. <div
  507. class="chapter_upload_ic_r"
  508. @click.stop="
  509. deleteChapterData($event, index2, 2)
  510. "
  511. >
  512. <div></div>
  513. </div>
  514. </div>
  515. <div class="chapter_upload_n">
  516. <input
  517. class="first"
  518. v-if="item2.type == 1 || item2.type == 3"
  519. :placeholder="item2.name"
  520. />
  521. <input
  522. class="first"
  523. v-if="item2.type == 2"
  524. :placeholder="item2.name"
  525. />
  526. <div class="chapter_upload_ud">
  527. <div
  528. class="chapter_upload_up"
  529. @click="upCd($event, index2, 2)"
  530. ></div>
  531. <div
  532. class="chapter_upload_down"
  533. @click="downCd($event, index2, 2)"
  534. ></div>
  535. </div>
  536. </div>
  537. </div>
  538. </div>
  539. </transition-group>
  540. </div>
  541. </div>
  542. <div class="add_info_box">
  543. <div class="upTips">
  544. <button class="info_btn" @click="addImg($event)">
  545. 上传附件
  546. <input
  547. type="file"
  548. accept="application/pdf, application/.ppt, .ppt, .pptx, .xlsx, .xls, application/msword, application/vnd.openxmlformats-officedocument.wordprocessingml.document,video/mp4, video/quicktime, video/x-msvideo,image/*"
  549. style="display: none"
  550. @change="beforeUpload($event, null, 2)"
  551. />
  552. </button>
  553. <div>
  554. 上传文件PPT、Word限制为10M,Excel、PDF上传限制为5M,其他文件不限制大小。
  555. </div>
  556. </div>
  557. </div>
  558. <div v-if="raceOver.actiDesign.data.proVisible" class="mask">
  559. <div class="progressBox">
  560. <!-- <div id="closePro2" class="closeCss">
  561. <img
  562. src="../../../../assets/icon/proClose.png"
  563. alt=""
  564. />
  565. </div> -->
  566. <div class="lbox">
  567. <img
  568. src="../../../../assets/loading.gif"
  569. />上传中,请稍后
  570. </div>
  571. <div>
  572. <div>
  573. {{ raceOver.actiDesign.data.isFinishSize }}M /
  574. {{
  575. raceOver.actiDesign.data.isAllSize
  576. ? raceOver.actiDesign.data.isAllSize
  577. : 0
  578. }}M
  579. </div>
  580. </div>
  581. <el-progress
  582. :text-inside="true"
  583. :stroke-width="20"
  584. :percentage="
  585. raceOver.actiDesign.data.progress
  586. ? raceOver.actiDesign.data.progress
  587. : 0
  588. "
  589. style="width: 80%"
  590. ></el-progress>
  591. </div>
  592. </div>
  593. </div>
  594. </div>
  595. </div>
  596. </div>
  597. </div>
  598. </div>
  599. </div>
  600. <el-dialog
  601. title="添加富文本"
  602. :visible.sync="dialogVisible"
  603. :append-to-body="true"
  604. width="500px"
  605. :before-close="handleClose"
  606. class="dialog_diy"
  607. >
  608. <el-form>
  609. <el-form-item label="文本标题">
  610. <el-input
  611. v-model="AttText.title"
  612. auto-complete="off"
  613. @input="change1"
  614. placeholder="请输入文本标题..."
  615. ></el-input>
  616. </el-form-item>
  617. <div>富文本内容</div>
  618. <editor-bar v-model="AttText.text" @change="change"></editor-bar>
  619. </el-form>
  620. <span slot="footer" class="dialog-footer">
  621. <el-button @click="clearAttText">取 消</el-button>
  622. <el-button type="primary" @click="isAddOrUpdateAttText">确定</el-button>
  623. </span>
  624. </el-dialog>
  625. <el-dialog
  626. title="添加链接"
  627. :visible.sync="dialogVisible1"
  628. :append-to-body="true"
  629. width="500px"
  630. :before-close="handleClose"
  631. class="dialog_diy lineCss"
  632. >
  633. <el-form>
  634. <el-form-item label="链接" :label-width="formLabelWidth">
  635. <span>
  636. <el-input
  637. placeholder="请输入链接"
  638. clearable
  639. v-model="line"
  640. class="add_input"
  641. ></el-input>
  642. </span>
  643. </el-form-item>
  644. </el-form>
  645. <span slot="footer" class="dialog-footer">
  646. <el-button @click="clearLine">取 消</el-button>
  647. <el-button type="primary" @click="isAddOrUpdateLine">确定</el-button>
  648. </span>
  649. </el-dialog>
  650. <el-dialog
  651. title="编辑富文本"
  652. :visible.sync="full"
  653. :append-to-body="true"
  654. width="100%"
  655. :before-close="handleClose"
  656. class="dialog_diy fullEditor"
  657. >
  658. <editor-bar v-model="fullBrief" :placeholder="plaText"></editor-bar>
  659. <span slot="footer" class="dialog-footer">
  660. <el-button @click="full = false">取 消</el-button>
  661. <el-button type="primary" @click="addFullText">确定</el-button>
  662. </span>
  663. </el-dialog>
  664. </div>
  665. </template>
  666. <script>
  667. import EditorBar from "../../../tools/wangEnduit";
  668. export default {
  669. components: { EditorBar },
  670. props: ["raceOverView"],
  671. data() {
  672. return {
  673. chapterData: [],
  674. formLabelWidth: "100px",
  675. noneBtnImg: false,
  676. raceOver: {
  677. driQuestion: { brief: "", data: [] },
  678. tarDesign: { brief: "", data: [] },
  679. actiDesign: { brief: "", data: [] },
  680. },
  681. AttText: {},
  682. task: 0,
  683. AttTextType: 0,
  684. AttTextIndex: 0,
  685. dialogVisible: false,
  686. dialogVisible1: false,
  687. full: false,
  688. line: "",
  689. lineCount: 0,
  690. fullBrief: "",
  691. plaText: "",
  692. isBrief: 0,
  693. ending: null,
  694. dragging: null,
  695. };
  696. },
  697. methods: {
  698. handleClose(done) {
  699. done();
  700. },
  701. change(val) {
  702. console.log(val);
  703. },
  704. handleDragStart(e, item) {
  705. this.dragging = item;
  706. },
  707. handleDragEnd(e, item, t) {
  708. if (this.ending.id === this.dragging.id) {
  709. return;
  710. }
  711. let newItems;
  712. if (t == 0) {
  713. newItems = [...this.raceOver.driQuestion.data];
  714. } else if (t == 1) {
  715. newItems = [...this.raceOver.tarDesign.data];
  716. } else {
  717. newItems = [...this.raceOver.actiDesign.data];
  718. }
  719. const src = newItems.indexOf(this.dragging);
  720. const dst = newItems.indexOf(this.ending);
  721. newItems.splice(src, 1, ...newItems.splice(dst, 1, newItems[src]));
  722. console.log(newItems);
  723. if (t == 0) {
  724. this.raceOver.driQuestion.data = newItems;
  725. } else if (t == 1) {
  726. this.raceOver.tarDesign.data = newItems;
  727. } else {
  728. this.raceOver.actiDesign.data = newItems;
  729. }
  730. this.$nextTick(() => {
  731. this.dragging = null;
  732. this.ending = null;
  733. });
  734. },
  735. handleDragOver(e) {
  736. // 首先把div变成可以放置的元素,即重写dragenter/dragover
  737. // 在dragenter中针对放置目标来设置
  738. e.dataTransfer.dropEffect = "move";
  739. },
  740. handleDragEnter(e, item) {
  741. // 为需要移动的元素设置dragstart事件
  742. e.dataTransfer.effectAllowed = "move";
  743. this.ending = item;
  744. },
  745. jump(t) {
  746. var a = document.getElementById(t);
  747. var b = document.getElementsByClassName("right")[0];
  748. b.scrollTop = a.offsetTop - 30;
  749. },
  750. change1(val) {
  751. console.log(val);
  752. this.$forceUpdate();
  753. },
  754. upFullBrief() {},
  755. addImg(e) {
  756. var el = e.currentTarget;
  757. el.getElementsByTagName("input")[0].click();
  758. e.target.value = "";
  759. },
  760. imgChange(file, fileList, type, jT) {
  761. if (jT == 0) {
  762. var _tmp = this.raceOver.driQuestion.data;
  763. } else if (jT == 1) {
  764. var _tmp = this.raceOver.tarDesign.data;
  765. } else {
  766. var _tmp = this.raceOver.actiDesign.data;
  767. }
  768. this.noneBtnImg = _tmp.length >= 1;
  769. },
  770. deleteChapterData(e, i, t) {
  771. e.stopPropagation();
  772. if (t == 0) {
  773. this.raceOver.driQuestion.data.splice(i, 1);
  774. } else if (t == 1) {
  775. this.raceOver.tarDesign.data.splice(i, 1);
  776. } else {
  777. this.raceOver.actiDesign.data.splice(i, 1);
  778. }
  779. },
  780. beforeUpload(event, type, jsonType) {
  781. var file = event.target.files[0];
  782. var credentials = {
  783. accessKeyId: "AKIATLPEDU37QV5CHLMH",
  784. secretAccessKey: "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",
  785. }; //秘钥形式的登录上传
  786. window.AWS.config.update(credentials);
  787. window.AWS.config.region = "cn-northwest-1"; //设置区域
  788. var type1 = type;
  789. var bucket = new window.AWS.S3({ params: { Bucket: "ccrb" } }); //选择桶
  790. var _this = this;
  791. var b = [
  792. "DOC",
  793. "DOCX",
  794. "DOCM",
  795. "DOTM",
  796. "DOTX",
  797. "PPTX",
  798. "PPSX",
  799. "PPT",
  800. "PPS",
  801. "PPTM",
  802. "POTM",
  803. "PPAM",
  804. "POTX",
  805. "PPSM",
  806. ];
  807. var c = ["PDF", "DOT", "DOC", "DOCX", "PPT", "PPTX", "XLSX", "XLS"];
  808. var d = [
  809. "BMP",
  810. "PJP",
  811. "APNG",
  812. "PNG",
  813. "JPG",
  814. "GIF",
  815. "SVG",
  816. "JPEG",
  817. "JPG",
  818. "ICO",
  819. "PGPEG",
  820. "AVIF",
  821. ];
  822. if (
  823. b.indexOf(
  824. file.name
  825. .split(".")
  826. [file.name.split(".").length - 1].toLocaleUpperCase()
  827. ) != -1
  828. ) {
  829. if (file.size / 1024 / 1024 > 10) {
  830. this.$message.error("上传文件大于10M,请重新选择文件!");
  831. return;
  832. }
  833. } else if (
  834. c.indexOf(
  835. file.name
  836. .split(".")
  837. [file.name.split(".").length - 1].toLocaleUpperCase()
  838. ) != -1
  839. ) {
  840. if (file.size / 1024 / 1024 > 5) {
  841. this.$message.error("添加的上传文件大于5M,请重新选择文件!");
  842. return;
  843. }
  844. } else if (
  845. file.name
  846. .split(".")
  847. [file.name.split(".").length - 1].toLocaleUpperCase() == "MP4" ||
  848. file.name
  849. .split(".")
  850. [file.name.split(".").length - 1].toLocaleUpperCase() == "M4V"
  851. ) {
  852. if (file.size / 1024 / 1024 > 760) {
  853. this.$message.error("添加的上传文件大于760M,请重新选择文件!");
  854. return;
  855. }
  856. }
  857. if (
  858. c.indexOf(
  859. file.name
  860. .split(".")
  861. [file.name.split(".").length - 1].toLocaleUpperCase()
  862. ) != -1
  863. ) {
  864. type1 = 1;
  865. } else if (
  866. d.indexOf(
  867. file.name
  868. .split(".")
  869. [file.name.split(".").length - 1].toLocaleUpperCase()
  870. ) != -1
  871. ) {
  872. type1 = 3;
  873. } else {
  874. type1 = 2;
  875. }
  876. if (jsonType == 0) {
  877. _this.raceOver.driQuestion.data.progress = 0;
  878. _this.raceOver.driQuestion.data.proVisible = true;
  879. _this.raceOver.driQuestion.data.isFinishSize = 0;
  880. _this.raceOver.driQuestion.data.isAllSize = 0;
  881. var a = (file.size / 1024 / 1024).toFixed(2);
  882. _this.raceOver.driQuestion.data.isAllSize = a - 0;
  883. } else if (jsonType == 1) {
  884. _this.raceOver.tarDesign.data.progress = 0;
  885. _this.raceOver.tarDesign.data.proVisible = true;
  886. _this.raceOver.tarDesign.data.isFinishSize = 0;
  887. _this.raceOver.tarDesign.data.isAllSize = 0;
  888. var a = (file.size / 1024 / 1024).toFixed(2);
  889. _this.raceOver.tarDesign.data.isAllSize = a - 0;
  890. } else {
  891. _this.raceOver.actiDesign.data.progress = 0;
  892. _this.raceOver.actiDesign.data.proVisible = true;
  893. _this.raceOver.actiDesign.data.isFinishSize = 0;
  894. _this.raceOver.actiDesign.data.isAllSize = 0;
  895. var a = (file.size / 1024 / 1024).toFixed(2);
  896. _this.raceOver.actiDesign.data.isAllSize = a - 0;
  897. }
  898. _this.$forceUpdate();
  899. if (file) {
  900. var params = {
  901. Key:
  902. file.name.split(".")[0] +
  903. new Date().getTime() +
  904. "." +
  905. file.name.split(".")[file.name.split(".").length - 1],
  906. ContentType: file.type,
  907. Body: file,
  908. "Access-Control-Allow-Credentials": "*",
  909. ACL: "public-read",
  910. }; //key可以设置为桶的相抵路径,Body为文件, ACL最好要设置
  911. var options = {
  912. partSize: 2048 * 1024 * 1024,
  913. queueSize: 2,
  914. leavePartsOnError: true,
  915. };
  916. bucket
  917. .upload(params, options)
  918. .on("httpUploadProgress", function (evt) {
  919. //这里可以写进度条
  920. // console.log("Uploaded : " + parseInt((evt.loaded * 80) / evt.total) + '%');
  921. if (jsonType == 0) {
  922. _this.raceOver.driQuestion.data.isFinishSize = (
  923. evt.loaded /
  924. 1024 /
  925. 1024
  926. ).toFixed(2);
  927. _this.raceOver.driQuestion.data.progress = parseInt(
  928. (evt.loaded / evt.total) * 100
  929. );
  930. } else if (jsonType == 1) {
  931. _this.raceOver.tarDesign.data.isFinishSize = (
  932. evt.loaded /
  933. 1024 /
  934. 1024
  935. ).toFixed(2);
  936. _this.raceOver.tarDesign.data.progress = parseInt(
  937. (evt.loaded / evt.total) * 100
  938. );
  939. } else {
  940. _this.raceOver.actiDesign.data.isFinishSize = (
  941. evt.loaded /
  942. 1024 /
  943. 1024
  944. ).toFixed(2);
  945. _this.raceOver.actiDesign.data.progress = parseInt(
  946. (evt.loaded / evt.total) * 100
  947. );
  948. }
  949. _this.$forceUpdate();
  950. })
  951. .send(function (err, data) {
  952. if (jsonType == 0) {
  953. _this.raceOver.driQuestion.data.progress = 100;
  954. } else if (jsonType == 1) {
  955. _this.raceOver.tarDesign.data.progress = 100;
  956. } else {
  957. _this.raceOver.actiDesign.data.progress = 100;
  958. }
  959. _this.raceOver.actiDesign.data.isFinishSize = _this.raceOver.actiDesign.data.isAllSize;
  960. _this.$forceUpdate();
  961. setTimeout(() => {
  962. if (jsonType == 0) {
  963. _this.raceOver.driQuestion.data.proVisible = false;
  964. } else if (jsonType == 1) {
  965. _this.raceOver.tarDesign.data.proVisible = false;
  966. } else {
  967. _this.raceOver.actiDesign.data.proVisible = false;
  968. }
  969. _this.$forceUpdate();
  970. }, 1000);
  971. if (err) {
  972. _this.$message.error("上传失败");
  973. } else {
  974. if (jsonType == 0) {
  975. _this.raceOver.driQuestion.data.push({
  976. name: file.name,
  977. url: data.Location,
  978. type: type1,
  979. id: "driData" + _this.raceOver.driQuestion.data.length,
  980. });
  981. _this.imgChange(null, null, type1, jsonType);
  982. } else if (jsonType == 1) {
  983. _this.raceOver.tarDesign.data.push({
  984. name: file.name,
  985. url: data.Location,
  986. type: type1,
  987. id: "tarData" + _this.raceOver.tarDesign.data.length,
  988. });
  989. _this.imgChange(null, null, type1, jsonType);
  990. } else {
  991. _this.raceOver.actiDesign.data.push({
  992. name: file.name,
  993. url: data.Location,
  994. type: type1,
  995. id: "actData" + _this.raceOver.actiDesign.data.length,
  996. });
  997. _this.imgChange(null, null, type1, jsonType);
  998. }
  999. console.log(data.Location);
  1000. }
  1001. });
  1002. }
  1003. },
  1004. upRaceOver() {
  1005. this.$emit("upRaceOver", this.raceOver);
  1006. },
  1007. addAttText(i) {
  1008. this.AttText = {
  1009. title: "",
  1010. text: "",
  1011. };
  1012. this.task = i;
  1013. this.AttTextType = 0;
  1014. this.$forceUpdate();
  1015. this.dialogVisible = true;
  1016. },
  1017. clearAttText() {
  1018. this.AttText = {
  1019. title: "",
  1020. text: "",
  1021. };
  1022. this.dialogVisible = false;
  1023. },
  1024. isAddOrUpdateAttText() {
  1025. if (this.AttTextType == 0) {
  1026. this.addAttTextMessage();
  1027. } else {
  1028. this.updateAttText();
  1029. }
  1030. },
  1031. addAttTextMessage() {
  1032. if (this.task == 0) {
  1033. this.raceOver.driQuestion.data.push({
  1034. name: this.AttText.title,
  1035. url: this.AttText.text,
  1036. type: 3,
  1037. });
  1038. this.imgChange(null, null, 3, this.task);
  1039. } else if (this.task == 1) {
  1040. this.raceOver.tarDesign.data.push({
  1041. name: this.AttText.title,
  1042. url: this.AttText.text,
  1043. type: 3,
  1044. });
  1045. this.imgChange(null, null, 3, this.task);
  1046. } else {
  1047. this.raceOver.actiDesign.data.push({
  1048. name: this.AttText.title,
  1049. url: this.AttText.text,
  1050. type: 3,
  1051. });
  1052. this.imgChange(null, null, 3, this.task);
  1053. }
  1054. this.dialogVisible = false;
  1055. this.upRaceOver();
  1056. },
  1057. updateAttText() {
  1058. if (this.task == 0) {
  1059. this.raceOver.driQuestion.data[this.AttTextIndex].name =
  1060. this.AttText.title;
  1061. this.raceOver.driQuestion.data[this.AttTextIndex].url =
  1062. this.AttText.text;
  1063. } else if (this.task == 1) {
  1064. this.raceOver.tarDesign.data[this.AttTextIndex].name =
  1065. this.AttText.title;
  1066. this.raceOver.tarDesign.data[this.AttTextIndex].url = this.AttText.text;
  1067. } else {
  1068. this.raceOver.actiDesign.data[this.AttTextIndex].name =
  1069. this.AttText.title;
  1070. this.raceOver.actiDesign.data[this.AttTextIndex].url =
  1071. this.AttText.text;
  1072. }
  1073. this.dialogVisible = false;
  1074. this.upRaceOver();
  1075. },
  1076. selectAttText(t, i) {
  1077. if (t == 0) {
  1078. this.AttText.title = this.raceOver.driQuestion.data[i].name;
  1079. this.AttText.text = this.raceOver.driQuestion.data[i].url;
  1080. } else if (t == 1) {
  1081. this.AttText.title = this.raceOver.tarDesign.data[i].name;
  1082. this.AttText.text = this.raceOver.tarDesign.data[i].url;
  1083. } else {
  1084. this.AttText.title = this.raceOver.actiDesign.data[i].name;
  1085. this.AttText.text = this.raceOver.actiDesign.data[i].url;
  1086. }
  1087. this.task = t;
  1088. this.AttTextIndex = i;
  1089. this.AttTextType = 1;
  1090. this.dialogVisible = true;
  1091. },
  1092. openLine(i) {
  1093. this.line = "";
  1094. this.task = i;
  1095. this.lineCount = i;
  1096. this.lineType = 0;
  1097. this.$forceUpdate();
  1098. this.dialogVisible1 = true;
  1099. },
  1100. clearLine() {
  1101. this.line = "";
  1102. this.dialogVisible1 = false;
  1103. },
  1104. isAddOrUpdateLine() {
  1105. if (this.lineType == 0) {
  1106. this.addLine();
  1107. } else {
  1108. this.updateLine();
  1109. }
  1110. },
  1111. addLine() {
  1112. if (this.task == 0) {
  1113. this.raceOver.driQuestion.data.push({
  1114. name: "链接",
  1115. url: this.line,
  1116. type: 4,
  1117. });
  1118. this.imgChange(null, null, 4, this.task);
  1119. } else if (this.task == 1) {
  1120. this.raceOver.tarDesign.data.push({
  1121. name: "链接",
  1122. url: this.line,
  1123. type: 4,
  1124. });
  1125. this.imgChange(null, null, 4, this.task);
  1126. } else {
  1127. this.raceOver.actiDesign.data.push({
  1128. name: "链接",
  1129. url: this.line,
  1130. type: 4,
  1131. });
  1132. this.imgChange(null, null, 4, this.task);
  1133. }
  1134. this.dialogVisible1 = false;
  1135. this.upRaceOver();
  1136. },
  1137. updateLine() {
  1138. if (this.task == 0) {
  1139. this.raceOver.driQuestion.data[this.lineCount].url = this.line;
  1140. } else if (this.task == 1) {
  1141. this.raceOver.tarDesign.data[this.lineCount].url = this.line;
  1142. } else {
  1143. this.raceOver.actiDesign.data[this.lineCount].url = this.line;
  1144. }
  1145. this.dialogVisible1 = false;
  1146. this.upRaceOver();
  1147. },
  1148. selectLine(t, i) {
  1149. if (t == 0) {
  1150. this.line = this.raceOver.driQuestion.data[i].url;
  1151. } else if (t == 1) {
  1152. this.line = this.raceOver.tarDesign.data[i].url;
  1153. } else {
  1154. this.line = this.raceOver.actiDesign.data[i].url;
  1155. }
  1156. this.task = t;
  1157. this.lineCount = i;
  1158. this.lineType = 1;
  1159. this.dialogVisible1 = true;
  1160. },
  1161. fullTools(b, t, text) {
  1162. this.fullBrief = b;
  1163. this.isBrief = t;
  1164. this.plaText = text;
  1165. this.full = !this.full;
  1166. },
  1167. addFullText() {
  1168. if (this.isBrief == 1) {
  1169. this.raceOver.driQuestion.brief = this.fullBrief;
  1170. } else if (this.isBrief == 2) {
  1171. this.raceOver.tarDesign.brief = this.fullBrief;
  1172. } else if (this.isBrief == 3) {
  1173. this.raceOver.actiDesign.brief = this.fullBrief;
  1174. }
  1175. this.isBrief = 0;
  1176. this.fullBrief = "";
  1177. this.plaText = "";
  1178. this.full = !this.full;
  1179. this.upRaceOver();
  1180. },
  1181. upCd(e, i, t) {
  1182. e.stopPropagation();
  1183. if (i == 0) {
  1184. return;
  1185. }
  1186. var c;
  1187. if (t == 0) {
  1188. c = this.raceOverView.driQuestion.data;
  1189. } else if (t == 1) {
  1190. c = this.raceOverView.tarDesign.data;
  1191. } else {
  1192. c = this.raceOverView.actiDesign.data;
  1193. }
  1194. var a = c[i - 1];
  1195. c[i - 1] = c[i];
  1196. c[i] = a;
  1197. this.$forceUpdate();
  1198. },
  1199. downCd(e, i, t) {
  1200. e.stopPropagation();
  1201. var c;
  1202. if (t == 0) {
  1203. c = this.raceOverView.driQuestion.data;
  1204. } else if (t == 1) {
  1205. c = this.raceOverView.tarDesign.data;
  1206. } else {
  1207. c = this.raceOverView.actiDesign.data;
  1208. }
  1209. if (i == c.length - 1) {
  1210. return;
  1211. }
  1212. var a = c[i + 1];
  1213. c[i + 1] = c[i];
  1214. c[i] = a;
  1215. this.$forceUpdate();
  1216. },
  1217. },
  1218. created() {
  1219. this.raceOver.driQuestion = this.raceOverView.driQuestion;
  1220. this.raceOver.tarDesign = this.raceOverView.tarDesign;
  1221. this.raceOver.actiDesign = this.raceOverView.actiDesign;
  1222. },
  1223. };
  1224. </script>
  1225. <style scoped>
  1226. @media screen and (max-width: 1280px) {
  1227. .fullCss {
  1228. right: 15% !important;
  1229. }
  1230. .fullEditor >>> .el-dialog__footer {
  1231. padding: 4% 20px 20px !important;
  1232. }
  1233. .upTips {
  1234. align-items: flex-start !important;
  1235. }
  1236. }
  1237. .dialog_diy >>> .el-dialog__header {
  1238. background: #3c3c3c !important;
  1239. padding: 15px 20px;
  1240. }
  1241. .dialog_diy >>> .el-dialog__title {
  1242. color: #fff;
  1243. }
  1244. .pb_content {
  1245. width: 100%;
  1246. height: 100%;
  1247. }
  1248. .race_content_body {
  1249. width: 100%;
  1250. position: relative;
  1251. margin: 0;
  1252. height: 100%;
  1253. }
  1254. .raceBox {
  1255. width: 100%;
  1256. height: 100%;
  1257. display: flex;
  1258. flex-direction: row;
  1259. flex-wrap: nowrap;
  1260. align-items: flex-start;
  1261. }
  1262. .stepBg {
  1263. font-size: 16px;
  1264. padding: 80px 0 0 0;
  1265. margin: 0 25px 0 0;
  1266. width: 15%;
  1267. display: flex;
  1268. justify-content: flex-start;
  1269. align-items: center;
  1270. flex-wrap: nowrap;
  1271. background: #fff;
  1272. /* min-height: 800px; */
  1273. height: calc(100% - 80px);
  1274. border-radius: 15px;
  1275. overflow: auto;
  1276. min-width: 260px;
  1277. flex-direction: column;
  1278. }
  1279. .steps {
  1280. display: flex;
  1281. flex-direction: row;
  1282. flex-wrap: nowrap;
  1283. position: relative;
  1284. width: 210px;
  1285. height: 130px;
  1286. }
  1287. .steps > div:nth-child(1) > img {
  1288. z-index: 9;
  1289. position: relative;
  1290. }
  1291. .stepLeft,
  1292. .isSteps {
  1293. width: 30px;
  1294. height: 30px;
  1295. border-radius: 50%;
  1296. text-align: center;
  1297. line-height: 30px;
  1298. border: 2px solid #eee;
  1299. color: #c0c0c0;
  1300. }
  1301. .isSteps {
  1302. background: #1990ff;
  1303. color: #fff;
  1304. border: none;
  1305. }
  1306. .stepRightNav {
  1307. display: flex;
  1308. flex-direction: column;
  1309. flex-wrap: nowrap;
  1310. justify-content: space-between;
  1311. align-items: flex-start;
  1312. margin: 10px 0 0 10px;
  1313. height: 40px;
  1314. cursor: pointer;
  1315. }
  1316. .stepRightNav > div {
  1317. margin-bottom: 5px;
  1318. }
  1319. .stepRightNav:hover {
  1320. color: #999;
  1321. }
  1322. .line,
  1323. .isLine {
  1324. position: absolute;
  1325. width: 5px;
  1326. height: 50px;
  1327. border-left: 1px solid #dadada;
  1328. top: 38px;
  1329. left: 15px;
  1330. }
  1331. .isLine {
  1332. border-left: 1px solid #1d92ff !important;
  1333. }
  1334. .right {
  1335. width: 100%;
  1336. background: rgb(255, 255, 255);
  1337. border-radius: 10px;
  1338. overflow: auto;
  1339. height: 100%;
  1340. border-radius: 15px;
  1341. /* max-height: 800px; */
  1342. }
  1343. .allBox {
  1344. padding: 25px;
  1345. }
  1346. .allBox > div:nth-child(1) {
  1347. color: #0f40f5;
  1348. font-size: 18px;
  1349. font-weight: bold;
  1350. }
  1351. .raceTop > div:nth-child(2) {
  1352. width: 80%;
  1353. margin-top: 10px;
  1354. }
  1355. .titleTop {
  1356. display: flex;
  1357. flex-direction: row;
  1358. flex-wrap: nowrap;
  1359. align-items: center;
  1360. width: 100%;
  1361. }
  1362. .titleTop > div:nth-child(2) {
  1363. width: 82%;
  1364. margin-left: 20px;
  1365. }
  1366. .editorCss {
  1367. width: 90% !important;
  1368. }
  1369. .basic_box {
  1370. position: relative;
  1371. margin: 0;
  1372. min-height: 0;
  1373. width: 90%;
  1374. }
  1375. .basic_box1 {
  1376. margin: 10px auto;
  1377. position: relative;
  1378. padding: 0 20px 0 20px;
  1379. }
  1380. .add_info_box {
  1381. margin: 20px 0;
  1382. }
  1383. .add_info_box button {
  1384. margin: 0 10px 10px 0;
  1385. }
  1386. .add_chapters_box {
  1387. text-align: left;
  1388. background-color: rgb(232 234 237);
  1389. width: 100%;
  1390. padding: 0px 15px;
  1391. border-radius: 15px;
  1392. font-size: 16px;
  1393. box-sizing: border-box;
  1394. position: relative;
  1395. padding: 0 10px 5px 10px;
  1396. height: 125px;
  1397. overflow-y: auto;
  1398. overflow-x: hidden;
  1399. }
  1400. .chapter_upload {
  1401. height: 50px;
  1402. margin-top: 8px;
  1403. position: relative;
  1404. display: flex;
  1405. align-items: center;
  1406. width: 100%;
  1407. min-height: 50px;
  1408. transition: all linear 0.3s;
  1409. }
  1410. .chapter_upload_t {
  1411. background-color: #fff;
  1412. position: absolute;
  1413. height: 100%;
  1414. top: 0px;
  1415. left: 0px;
  1416. border-radius: 40px;
  1417. box-sizing: border-box;
  1418. box-shadow: 0 0 3px 3px #dfdfdf;
  1419. width: 100%;
  1420. }
  1421. .chapter_upload_o {
  1422. width: 100%;
  1423. height: 100%;
  1424. position: relative;
  1425. z-index: 1;
  1426. display: flex;
  1427. align-items: center;
  1428. }
  1429. .chapter_upload_ic {
  1430. height: 30px;
  1431. float: right;
  1432. cursor: pointer;
  1433. position: absolute;
  1434. width: 45px;
  1435. right: 0;
  1436. top: 0;
  1437. }
  1438. .chapter_upload_ic_l {
  1439. width: 50px;
  1440. height: 50px;
  1441. float: left;
  1442. }
  1443. .chapter_upload_ic_l div {
  1444. width: 30px;
  1445. height: 35px;
  1446. background: url("../../../../assets/icon/icon.png");
  1447. }
  1448. .chapter_upload_ic_r {
  1449. width: 50px;
  1450. height: 50px;
  1451. float: left;
  1452. margin-left: 0px;
  1453. display: flex;
  1454. align-items: center;
  1455. position: absolute;
  1456. }
  1457. .chapter_upload_ic_r div {
  1458. width: 25px;
  1459. height: 25px;
  1460. background-image: url("../../../../assets/delete.png");
  1461. background-size: 100% 100%;
  1462. }
  1463. .chapter_upload_n {
  1464. display: flex;
  1465. text-indent: 10px;
  1466. text-decoration: none;
  1467. text-overflow: ellipsis;
  1468. white-space: nowrap;
  1469. overflow: hidden;
  1470. width: 55%;
  1471. margin-left: 10px;
  1472. cursor: pointer;
  1473. margin-top: 2px;
  1474. }
  1475. .chapter_upload_l_i1 {
  1476. background-image: url("../../../../assets/icon/video.png");
  1477. width: 28px;
  1478. height: 28px;
  1479. background-size: 100% 100%;
  1480. }
  1481. .chapter_upload_l_i5 {
  1482. background-image: url("../../../../assets/icon/word.png");
  1483. width: 24px;
  1484. height: 24px;
  1485. background-size: 100% 100%;
  1486. margin-left: 1px;
  1487. }
  1488. .chapter_upload_l_i8 {
  1489. background-image: url("../../../../assets/icon/line.png");
  1490. width: 24px;
  1491. height: 24px;
  1492. background-size: 100% 100%;
  1493. margin-left: 1px;
  1494. }
  1495. .chapter_upload_ud {
  1496. display: flex;
  1497. flex-direction: column;
  1498. margin-left: 5px;
  1499. justify-content: center;
  1500. z-index: 99;
  1501. }
  1502. .chapter_upload_up {
  1503. background-image: url("../../../../assets/icon/up.png");
  1504. width: 17px;
  1505. height: 15px;
  1506. background-size: 100% 100%;
  1507. cursor: pointer;
  1508. }
  1509. .chapter_upload_down {
  1510. background-image: url("../../../../assets/icon/down.png");
  1511. width: 17px;
  1512. height: 15px;
  1513. margin: 2px auto 0 auto;
  1514. background-size: 100% 100%;
  1515. cursor: pointer;
  1516. }
  1517. .chapter_upload_l {
  1518. padding: 1px 0 0 10px;
  1519. }
  1520. .first {
  1521. border: none;
  1522. outline: none;
  1523. width: 80%;
  1524. min-width: 215px;
  1525. z-index: 99;
  1526. font-size: 14px;
  1527. white-space: nowrap;
  1528. overflow: hidden;
  1529. text-overflow: ellipsis;
  1530. }
  1531. .info_btn {
  1532. color: #fff;
  1533. background-color: #0f7eff;
  1534. padding: 8px 24px;
  1535. font-size: 0.9375rem;
  1536. box-shadow: 0px 1px 3px 0px rgb(0 0 0 / 20%), 0px 2px 2px 0px rgb(0 0 0 / 14%),
  1537. 0px 3px 1px -2px rgb(0 0 0 / 12%);
  1538. min-width: 64px;
  1539. font-weight: 500;
  1540. border-radius: 4px;
  1541. box-sizing: border-box;
  1542. border: none;
  1543. cursor: pointer;
  1544. }
  1545. .info_btn:hover {
  1546. background-color: #4f7cd5 !important;
  1547. }
  1548. .right_title {
  1549. height: 30px;
  1550. font-size: 1.5em;
  1551. font-weight: bold;
  1552. color: #0f7eff;
  1553. width: 10%;
  1554. min-width: 100px;
  1555. }
  1556. .whiteBg {
  1557. background: #fff;
  1558. border-radius: 10px;
  1559. }
  1560. .lineBox {
  1561. display: flex;
  1562. margin: 0 0 20px 0;
  1563. flex-direction: row;
  1564. justify-content: flex-start;
  1565. align-items: center;
  1566. }
  1567. .lineTitle {
  1568. margin-top: 15px;
  1569. width: 110px;
  1570. }
  1571. .strLine {
  1572. width: 85%;
  1573. margin: 0 auto;
  1574. border-top: 1px solid #e5e5e5;
  1575. margin-top: 20px;
  1576. }
  1577. .stepBg .steps:nth-child(1) ::after,
  1578. .stepBg .steps:nth-child(2) ::after {
  1579. content: "";
  1580. height: 100%;
  1581. background: #eee;
  1582. width: 4px;
  1583. position: absolute;
  1584. left: 15px;
  1585. top: calc(50% + (35px / 2));
  1586. transform: translateY(-50%);
  1587. z-index: 1;
  1588. }
  1589. .mask {
  1590. background-color: rgb(0 0 0 / 30%);
  1591. /* position: fixed; */
  1592. position: absolute;
  1593. top: 0;
  1594. left: 0;
  1595. width: 100%;
  1596. height: 100%;
  1597. z-index: 20000;
  1598. display: flex;
  1599. align-items: center;
  1600. justify-content: center;
  1601. }
  1602. .progressBox {
  1603. width: 300px;
  1604. height: 150px;
  1605. background: #fff;
  1606. border-radius: 10px;
  1607. box-shadow: 0 0 6px 1px #bfbfbf;
  1608. display: flex;
  1609. align-items: center;
  1610. justify-content: center;
  1611. flex-direction: column;
  1612. position: relative;
  1613. }
  1614. .progressBox >>> .el-progress-bar__outer {
  1615. background-color: #d1dfff !important;
  1616. }
  1617. .progressBox .lbox {
  1618. height: 60px;
  1619. font-size: 19px;
  1620. display: flex;
  1621. align-items: center;
  1622. color: #747474;
  1623. }
  1624. .progressBox .lbox img {
  1625. width: 40px;
  1626. margin-right: 20px;
  1627. }
  1628. .firstTop {
  1629. display: flex;
  1630. flex-direction: row;
  1631. flex-wrap: nowrap;
  1632. align-items: center;
  1633. width: 90%;
  1634. padding: 20px 0 20px 20px;
  1635. }
  1636. .rightNav {
  1637. width: 87%;
  1638. color: #a19f9f;
  1639. }
  1640. .isFinishCss {
  1641. display: flex;
  1642. flex-direction: row;
  1643. flex-wrap: nowrap;
  1644. align-items: flex-end;
  1645. }
  1646. .isFinishCss > div:nth-child(2) {
  1647. margin-left: 5px;
  1648. color: #939393;
  1649. }
  1650. .isFinish {
  1651. width: 16px;
  1652. height: 16px;
  1653. margin-top: 5px;
  1654. }
  1655. .isFinish > img {
  1656. width: 100%;
  1657. height: 100%;
  1658. }
  1659. .full,
  1660. .closeImg {
  1661. height: 22px;
  1662. cursor: pointer;
  1663. background: #000;
  1664. }
  1665. .fullCss {
  1666. font-size: 12px;
  1667. position: absolute;
  1668. right: 14%;
  1669. top: 12px;
  1670. cursor: pointer;
  1671. }
  1672. .fullEditor >>> .text {
  1673. height: 100% !important;
  1674. }
  1675. .fullEditor >>> .el-dialog {
  1676. margin: 0 !important;
  1677. height: 100%;
  1678. }
  1679. .fullEditor >>> .el-dialog__body {
  1680. height: 70%;
  1681. }
  1682. .fullEditor >>> .editor {
  1683. height: 100%;
  1684. }
  1685. .fullEditor >>> .el-dialog__footer {
  1686. padding: 2% 20px 20px !important;
  1687. }
  1688. .upTips {
  1689. display: flex;
  1690. flex-direction: row;
  1691. flex-wrap: nowrap;
  1692. align-items: baseline;
  1693. }
  1694. .upTips > div {
  1695. margin-left: 10px;
  1696. color: #999;
  1697. font-size: 14px;
  1698. }
  1699. .closeCss {
  1700. position: absolute;
  1701. top: 8px;
  1702. right: 8px;
  1703. cursor: pointer;
  1704. width: 20px;
  1705. height: 20px;
  1706. }
  1707. .closeCss > img {
  1708. width: 100%;
  1709. height: 100%;
  1710. }
  1711. </style>