raceDetail.vue 62 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321
  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" @click="jump('first')">
  12. <div>课程基础信息</div>
  13. <div
  14. class="isFinishCss"
  15. v-if="raceDetail.title != '' && raceDetail.type.length > 0"
  16. >
  17. <div class="isFinish">
  18. <img src="../../../../assets/icon/race/finish.png" alt="" />
  19. </div>
  20. <div>已填写</div>
  21. </div>
  22. </div>
  23. </div>
  24. <div class="steps">
  25. <div>
  26. <img src="../../../../assets/icon/race/progress.png" alt="" />
  27. </div>
  28. <div class="stepRightNav" @click="jump('second')">
  29. <div>案例封面设置</div>
  30. <div class="isFinishCss" v-if="raceDetail.cover.length > 0">
  31. <div class="isFinish">
  32. <img src="../../../../assets/icon/race/finish.png" alt="" />
  33. </div>
  34. <div>已填写</div>
  35. </div>
  36. </div>
  37. </div>
  38. <div class="steps">
  39. <div>
  40. <img src="../../../../assets/icon/race/progress.png" alt="" />
  41. </div>
  42. <div class="stepRightNav" @click="jump('third')">
  43. <div>联系人</div>
  44. <div class="isFinishCss" v-if="raceDetail.autor.length > 0">
  45. <div class="isFinish">
  46. <img src="../../../../assets/icon/race/finish.png" alt="" />
  47. </div>
  48. <div>已填写</div>
  49. </div>
  50. </div>
  51. </div>
  52. <div class="steps">
  53. <div>
  54. <img src="../../../../assets/icon/race/progress.png" alt="" />
  55. </div>
  56. <div class="stepRightNav" @click="jump('sixth')">
  57. <div>协作者</div>
  58. <div class="isFinishCss" v-if="raceDetail.tableData.length > 0">
  59. <div class="isFinish">
  60. <img src="../../../../assets/icon/race/finish.png" alt="" />
  61. </div>
  62. <div>已填写</div>
  63. </div>
  64. </div>
  65. </div>
  66. <!-- <div class="steps">
  67. <div>
  68. <img src="../../../../assets/icon/race/progress.png" alt="" />
  69. </div>
  70. <div class="stepRightNav" @click="jump('fouth')">
  71. <div>项目简介</div>
  72. <div class="isFinishCss" v-if="raceDetail.courseText != ''">
  73. <div class="isFinish">
  74. <img src="../../../../assets/icon/race/finish.png" alt="" />
  75. </div>
  76. <div>已填写</div>
  77. </div>
  78. </div>
  79. </div> -->
  80. <div class="steps">
  81. <div>
  82. <img src="../../../../assets/icon/race/progress.png" alt="" />
  83. </div>
  84. <div class="stepRightNav" @click="jump('fivth')">
  85. <div>文件上传</div>
  86. <div class="isFinishCss" v-if="raceDetail.data.length > 0">
  87. <div class="isFinish">
  88. <img src="../../../../assets/icon/race/finish.png" alt="" />
  89. </div>
  90. <div>已填写</div>
  91. </div>
  92. </div>
  93. </div>
  94. </div>
  95. <div class="right">
  96. <div class="whiteBg">
  97. <div class="right_title" id="first">
  98. <span style="color: red">*</span>课程基本信息
  99. </div>
  100. <div class="basic_box">
  101. <div class="big_box">
  102. <div class="left_first">
  103. <div>
  104. <div>
  105. <div class="bInfo_title" style="margin-bottom: 15px">
  106. <span style="color: red">*</span> 课程名称
  107. </div>
  108. <div style="display: flex; margin-right: 20px">
  109. <img
  110. src="../../../../assets/icon/projectName.png"
  111. alt
  112. style="margin-right: 8px"
  113. />
  114. <input
  115. type="text"
  116. placeholder="请输入课程名称"
  117. class="binfo_input"
  118. v-model="raceDetail.title"
  119. @input="updateTitle"
  120. />
  121. </div>
  122. </div>
  123. <div class="both">
  124. <div class="choose">
  125. <div
  126. class="all_choose"
  127. v-for="(item, index) in CourseType[0]"
  128. :key="index"
  129. >
  130. <span>{{ item.name }}</span>
  131. <el-checkbox-group
  132. v-model="raceDetail.type"
  133. @change="updateTitle"
  134. >
  135. <el-checkbox
  136. @change="updateType(item1)"
  137. v-for="item1 in CourseTypeJson[item.id]"
  138. :key="item1.id"
  139. :label="item1.id"
  140. >{{ item1.name }}
  141. </el-checkbox>
  142. </el-checkbox-group>
  143. </div>
  144. </div>
  145. </div>
  146. <div style="display: flex">
  147. <div
  148. class="bInfo_title"
  149. style="margin-bottom: 15px; margin-right: 25px"
  150. >
  151. 课时
  152. </div>
  153. <div>
  154. <el-input
  155. v-model="raceDetail.typeOtherName"
  156. placeholder="输入课时"
  157. @change="isNumber($event)"
  158. ></el-input>
  159. </div>
  160. </div>
  161. </div>
  162. </div>
  163. </div>
  164. </div>
  165. </div>
  166. <div class="whiteBg" style="border-radius: 0">
  167. <div class="right_first">
  168. <div class="right_title" id="second">案例封面设置</div>
  169. <div class="fmBox">
  170. <div>
  171. <div class="bInfo_title" style="margin-top: 0 !important">
  172. 案例封面
  173. </div>
  174. <div class="picBox">
  175. <div>
  176. <div
  177. class="uploadFm"
  178. v-if="raceDetail.cover.length === 0"
  179. @click="choosePicVisible = true"
  180. >
  181. <!-- @click="addImg($event)" -->
  182. <img
  183. src="../../../../assets/icon/addPoster.png"
  184. alt=""
  185. />
  186. <!-- <input
  187. type="file"
  188. accept="image/*"
  189. style="display: none"
  190. @change="beforeUpload1"
  191. /> -->
  192. </div>
  193. <el-upload
  194. :class="{ disUoloadSty: noneBtnImg }"
  195. class="upCss"
  196. action="#"
  197. list-type="picture"
  198. v-loading="uploadLoading1"
  199. :http-request="beforeUpload1"
  200. ref="upload1"
  201. :on-preview="handlePictureCardPreview"
  202. :on-remove="handle_remove1"
  203. :show-file-list="true"
  204. :file-list="raceDetail.cover"
  205. accept="image/*"
  206. :limit="1"
  207. :on-exceed="onExceed"
  208. v-else
  209. >
  210. <i class="el-icon-plus"></i>
  211. </el-upload>
  212. </div>
  213. </div>
  214. </div>
  215. </div>
  216. </div>
  217. </div>
  218. <div class="whiteBg" style="border-radius: 0">
  219. <div class="right_first">
  220. <div class="right_title" id="third">
  221. <span style="color: red">*</span>联系人
  222. </div>
  223. <div
  224. class="addPeople"
  225. @click="addAutor(0)"
  226. v-if="raceDetail.autor.length == 0"
  227. >
  228. 添加联系人
  229. </div>
  230. <div class="raTable">
  231. <el-table
  232. class="tableColor"
  233. ref="table"
  234. :data="raceDetail.autor"
  235. :height="tableHeight"
  236. :fit="true"
  237. style="width: 100%"
  238. :header-cell-style="{
  239. background: '#f1f1f1',
  240. fontSize: '17px',
  241. }"
  242. :row-class-name="tableRowClassName"
  243. >
  244. <el-table-column label="姓名" min-width="15" align="center">
  245. <template slot-scope="scope">
  246. <!-- <div class="userImg">
  247. <div class="tx">
  248. <img :src="tx" alt />
  249. </div>
  250. <div class="fontWidth">
  251. {{ scope.row.sn }}
  252. </div>
  253. </div> -->
  254. <div class="fontWidth">
  255. {{ scope.row.sn }}
  256. </div>
  257. </template>
  258. </el-table-column>
  259. <el-table-column label="学科" min-width="15" align="center">
  260. <template slot-scope="scope">
  261. <div>{{ scope.row.su ? scope.row.su : "" }}</div>
  262. </template>
  263. </el-table-column>
  264. <el-table-column label="学校" min-width="20" align="center">
  265. <template slot-scope="scope">
  266. <div>{{ scope.row.sc ? scope.row.sc : "" }}</div>
  267. </template>
  268. </el-table-column>
  269. <el-table-column label="邮箱" min-width="20" align="center">
  270. <template slot-scope="scope">
  271. <div>{{ scope.row.em ? scope.row.em : "" }}</div>
  272. </template>
  273. </el-table-column>
  274. <el-table-column label="电话" min-width="15" align="center">
  275. <template slot-scope="scope">
  276. <div>
  277. {{ scope.row.ph ? scope.row.ph : "" }}
  278. </div>
  279. </template>
  280. </el-table-column>
  281. <el-table-column label="操作" min-width="20">
  282. <template slot-scope="scope">
  283. <div class="pb_buttonBox">
  284. <!-- <el-button
  285. size="mini"
  286. type="primary"
  287. style="cursor: pointer"
  288. @click="updateStudent(scope.row, scope.$index)"
  289. >修改</el-button
  290. > -->
  291. <div
  292. class="delete"
  293. style="margin-left: 0"
  294. @click="updateStudent(scope.row, scope.$index, 0)"
  295. >
  296. <img src="../../../../assets/autorUp.png" alt />
  297. </div>
  298. <div
  299. class="delete"
  300. @click="deleteStudent(scope.$index, 0)"
  301. >
  302. <img src="../../../../assets/remove.png" alt />
  303. </div>
  304. </div>
  305. </template>
  306. </el-table-column>
  307. </el-table>
  308. </div>
  309. <div
  310. style="
  311. color: #cd0808;
  312. width: 97%;
  313. margin: 10px auto;
  314. font-size: 14px;
  315. "
  316. >
  317. *项目联系人的所有信息为必填项,每个项目只限1名联系人。
  318. </div>
  319. </div>
  320. </div>
  321. <div class="whiteBg" style="border-radius: 0">
  322. <div class="right_first">
  323. <div class="right_title" id="sixth">协作者</div>
  324. <div
  325. class="addPeople"
  326. @click="addAutor(1)"
  327. v-if="raceDetail.tableData.length < 4"
  328. >
  329. 添加协作者
  330. </div>
  331. <div class="raTable">
  332. <el-table
  333. class="tableColor"
  334. ref="table"
  335. :data="raceDetail.tableData"
  336. :height="tableHeight"
  337. :fit="true"
  338. style="width: 100%"
  339. :header-cell-style="{
  340. background: '#f1f1f1',
  341. fontSize: '17px',
  342. }"
  343. >
  344. <el-table-column label="姓名" min-width="20" align="center">
  345. <template slot-scope="scope">
  346. <!-- <div class="userImg">
  347. <div class="tx">
  348. <img :src="tx" alt />
  349. </div>
  350. </div> -->
  351. <div class="fontWidth">
  352. {{ scope.row.sn }}
  353. </div>
  354. </template>
  355. </el-table-column>
  356. <el-table-column label="学科" min-width="15" align="center">
  357. <template slot-scope="scope">
  358. <div>{{ scope.row.su ? scope.row.su : "" }}</div>
  359. </template>
  360. </el-table-column>
  361. <el-table-column label="学校" min-width="15" align="center">
  362. <template slot-scope="scope">
  363. <div>{{ scope.row.sc ? scope.row.sc : "" }}</div>
  364. </template>
  365. </el-table-column>
  366. <el-table-column label="邮箱" min-width="15" align="center">
  367. <template slot-scope="scope">
  368. <div>{{ scope.row.em ? scope.row.em : "" }}</div>
  369. </template>
  370. </el-table-column>
  371. <el-table-column label="电话" min-width="15" align="center">
  372. <template slot-scope="scope">
  373. <div>
  374. {{ scope.row.ph ? scope.row.ph : "" }}
  375. </div>
  376. </template>
  377. </el-table-column>
  378. <el-table-column label="操作" min-width="20">
  379. <template slot-scope="scope">
  380. <div class="pb_buttonBox">
  381. <!-- <el-button
  382. size="mini"
  383. type="primary"
  384. style="cursor: pointer"
  385. @click="updateStudent(scope.row, scope.$index)"
  386. >修改</el-button
  387. > -->
  388. <div
  389. class="delete"
  390. style="margin-left: 0"
  391. @click="updateStudent(scope.row, scope.$index, 1)"
  392. >
  393. <img src="../../../../assets/autorUp.png" alt />
  394. </div>
  395. <div
  396. class="delete"
  397. @click="deleteStudent(scope.$index, 1)"
  398. >
  399. <img src="../../../../assets/remove.png" alt />
  400. </div>
  401. </div>
  402. </template>
  403. </el-table-column>
  404. </el-table>
  405. </div>
  406. <div
  407. style="
  408. color: #cd0808;
  409. width: 97%;
  410. margin: 10px auto;
  411. font-size: 14px;
  412. "
  413. >
  414. 协作者(不含联系人)不超过4人;姓名为必填项,其余信息非必填项。
  415. </div>
  416. </div>
  417. </div>
  418. <!-- <div class="whiteBg" style="border-radius: 0">
  419. <div class="right_first">
  420. <div class="right_title" id="fouth">
  421. <span style="color: red">*</span>项目简介
  422. </div>
  423. <div class="secondTop">
  424. <el-input
  425. type="textarea"
  426. placeholder="200字以内,介绍项目背景,描述生活中的现象,引出要解决的核心问题,概述解决问题的思路及预期成果等。"
  427. v-model="raceDetail.courseText"
  428. @input="updateTitle"
  429. maxlength="200"
  430. show-word-limit
  431. rows="8"
  432. class="tAreaCss"
  433. cols
  434. >
  435. </el-input>
  436. </div>
  437. </div>
  438. </div> -->
  439. <div class="whiteBg" style="border-radius: 0">
  440. <div class="right_first">
  441. <div class="right_title" id="fivth">
  442. <span style="color: red">*</span>文件上传
  443. </div>
  444. <div class="secondTop">
  445. <div>
  446. <div class="basic_box1" style="width: 100%">
  447. <div>
  448. <div
  449. class="add_chapters_box"
  450. v-if="raceDetail.data && raceDetail.data.length == 0"
  451. ></div>
  452. <div
  453. v-else
  454. class="add_chapters_box"
  455. style="display: flex; flex-direction: column"
  456. >
  457. <div
  458. class="chapter_upload"
  459. v-for="(item, index) in raceDetail.data"
  460. :key="index"
  461. draggable="true"
  462. @dragstart="handleDragStart($event, index)"
  463. @dragover.prevent="handleDragOver($event, index)"
  464. @dragenter="handleDragEnter($event, index)"
  465. @dragend="handleDragEnd($event, index)"
  466. >
  467. <div class="chapter_upload_t"></div>
  468. <div class="chapter_upload_o">
  469. <div class="chapter_upload_l">
  470. <div
  471. v-if="item.type == 2"
  472. class="chapter_upload_l_i1"
  473. ></div>
  474. <div
  475. v-if="item.type == 1 || item.type == 3"
  476. class="chapter_upload_l_i5"
  477. ></div>
  478. </div>
  479. <div class="chapter_upload_ic">
  480. <div class="chapter_upload_ic_l"></div>
  481. <div
  482. class="chapter_upload_ic_r"
  483. @click.stop="
  484. deleteChapterData($event, index, 0)
  485. "
  486. >
  487. <div></div>
  488. </div>
  489. </div>
  490. <div class="chapter_upload_n">
  491. <input
  492. class="first"
  493. v-if="item.type == 1 || item.type == 3"
  494. :placeholder="item.name"
  495. />
  496. <input
  497. class="first"
  498. v-if="item.type == 2"
  499. :placeholder="item.name"
  500. />
  501. <div class="chapter_upload_ud">
  502. <div
  503. class="chapter_upload_up"
  504. @click="upCd($event, index)"
  505. ></div>
  506. <div
  507. class="chapter_upload_down"
  508. @click="downCd($event, index)"
  509. ></div>
  510. </div>
  511. </div>
  512. </div>
  513. </div>
  514. </div>
  515. </div>
  516. <div class="add_info_box">
  517. <div class="upTips">
  518. <button
  519. class="info_btn"
  520. @click="addImg($event)"
  521. style="min-width: 108px"
  522. id="forUp"
  523. >
  524. 上传附件
  525. <input
  526. type="file"
  527. accept="application/pdf,application/zip"
  528. style="display: none"
  529. @change="beforeUpload($event, null, 0)"
  530. />
  531. </button>
  532. <div style="color: red">
  533. *此处需要提交《美好盐田课程设计模板》的PDF格式文件。建议大小为80M以内。
  534. </div>
  535. </div>
  536. </div>
  537. <div v-if="raceDetail.data.proVisible" class="mask">
  538. <div class="progressBox">
  539. <!-- <div id="closePro" class="closeCss">
  540. <img
  541. src="../../../../assets/icon/proClose.png"
  542. alt=""
  543. />
  544. </div> -->
  545. <div class="lbox">
  546. <img
  547. src="../../../../assets/loading.gif"
  548. />上传中,请稍后
  549. </div>
  550. <div style="margin-bottom: 10px">
  551. <div>
  552. {{ raceDetail.data.isFinishSize }}M /
  553. {{
  554. raceDetail.data.isAllSize
  555. ? raceDetail.data.isAllSize
  556. : 0
  557. }}M
  558. </div>
  559. </div>
  560. <el-progress
  561. :text-inside="true"
  562. :stroke-width="20"
  563. :percentage="
  564. raceDetail.data.progress
  565. ? raceDetail.data.progress
  566. : 0
  567. "
  568. style="width: 80%"
  569. ></el-progress>
  570. </div>
  571. </div>
  572. </div>
  573. </div>
  574. </div>
  575. </div>
  576. </div>
  577. </div>
  578. <!-- <div class="buttonCss">
  579. <div class="info_btn noBg">预览</div>
  580. <div class="info_btn noBg">保存</div>
  581. <div class="info_btn" style="margin-right: 25px">下一步</div>
  582. </div> -->
  583. </div>
  584. </div>
  585. <el-dialog
  586. :title="isAddOrUp == true ? '修改项目成员' : '添加项目成员'"
  587. :visible.sync="dialogVisibleMember"
  588. :append-to-body="true"
  589. width="700px"
  590. height="80%"
  591. :before-close="handleClose"
  592. class="add_student"
  593. >
  594. <el-form>
  595. <el-form-item label="姓名" :label-width="formLabelWidth">
  596. <span>
  597. <el-input
  598. placeholder="请输入姓名"
  599. clearable
  600. v-model="sName"
  601. class="add_input"
  602. ></el-input>
  603. </span>
  604. </el-form-item>
  605. <el-form-item label="学科" :label-width="formLabelWidth">
  606. <span>
  607. <el-input
  608. placeholder="请输入学科"
  609. clearable
  610. v-model="sSubject"
  611. class="add_input"
  612. ></el-input>
  613. </span>
  614. </el-form-item>
  615. <el-form-item label="学校" :label-width="formLabelWidth">
  616. <span>
  617. <el-input
  618. placeholder="请输入学校"
  619. clearable
  620. v-model="sSchool"
  621. class="add_input"
  622. ></el-input>
  623. </span>
  624. </el-form-item>
  625. <el-form-item label="邮箱" :label-width="formLabelWidth">
  626. <span>
  627. <el-input
  628. placeholder="请输入邮箱"
  629. clearable
  630. v-model="sEmail"
  631. class="add_input"
  632. ></el-input>
  633. </span>
  634. </el-form-item>
  635. <el-form-item label="电话" :label-width="formLabelWidth">
  636. <span>
  637. <el-input
  638. placeholder="请输入电话"
  639. clearable
  640. v-model="sPhone"
  641. class="add_input"
  642. ></el-input>
  643. </span>
  644. </el-form-item>
  645. </el-form>
  646. <span slot="footer" class="dialog-footer">
  647. <el-button @click="dialogVisibleMember = false">取 消</el-button>
  648. <el-button type="primary" @click="isAddPPTeacher">确定</el-button>
  649. </span>
  650. </el-dialog>
  651. <el-dialog
  652. title="上传图片"
  653. :visible.sync="choosePicVisible"
  654. :append-to-body="true"
  655. width="500px"
  656. :before-close="handleClose"
  657. class="dialog_diy"
  658. >
  659. <div>
  660. <div class="fileCss" style="padding-top: 20px">
  661. <div>
  662. <button class="info_btn" @click="addImg($event)">
  663. 选择本地文件
  664. <input
  665. type="file"
  666. accept="image/*"
  667. style="display: none"
  668. @change="beforeUpload1"
  669. />
  670. </button>
  671. </div>
  672. <div>
  673. <el-button
  674. @click="getAllBanner"
  675. v-if="isSysPic == false && raceDetail.cover.length == 0"
  676. >选择系统文件</el-button
  677. >
  678. <div
  679. class="isSysPic"
  680. v-if="isSysPic == true && raceDetail.cover.length > 0"
  681. >
  682. <img :src="raceDetail.cover[0].url" alt="" />
  683. <div class="deletePic" @click="deleteSysPic">
  684. <img src="../../../../assets/icon/delete.png" alt="" />
  685. </div>
  686. </div>
  687. </div>
  688. </div>
  689. <div class="fileCss" v-if="raceDetail.cover.length > 0">
  690. <div>选择本地文件</div>
  691. <div>选择系统文件</div>
  692. </div>
  693. </div>
  694. <span slot="footer" class="dialog-footer">
  695. <el-button @click="choosePicVisible = false">取 消</el-button>
  696. <el-button type="primary" @click="choosePicVisible = false"
  697. >确 定</el-button
  698. >
  699. </span>
  700. </el-dialog>
  701. <el-dialog
  702. title="选择系统文件"
  703. :visible.sync="sysPicVisible"
  704. :append-to-body="true"
  705. width="700px"
  706. :before-close="handleClose"
  707. class="dialog_diy"
  708. >
  709. <div class="cru_selectBox" style="margin: 0">
  710. <div
  711. @click="getChoosePic(1)"
  712. class="cru_select"
  713. :class="chooseType == 1 ? 'cru_selected' : ''"
  714. >
  715. 绘画
  716. </div>
  717. <div
  718. @click="getChoosePic(2)"
  719. class="cru_select"
  720. :class="chooseType == 2 ? 'cru_selected' : ''"
  721. >
  722. 科技
  723. </div>
  724. <div
  725. @click="getChoosePic(3)"
  726. class="cru_select"
  727. :class="chooseType == 3 ? 'cru_selected' : ''"
  728. >
  729. 人文
  730. </div>
  731. <div
  732. @click="getChoosePic(4)"
  733. class="cru_select"
  734. :class="chooseType == 4 ? 'cru_selected' : ''"
  735. >
  736. 艺术
  737. </div>
  738. </div>
  739. <div class="sysPicBox">
  740. <div v-for="(sys, sysIndex) in sysPic" :key="sysIndex" class="sysPic">
  741. <img :src="sys.poster" alt="" @click="chooseSysPic(sys.poster)" />
  742. </div>
  743. </div>
  744. <span slot="footer" class="dialog-footer">
  745. <el-button @click="sysPicVisible = false">取 消</el-button>
  746. <el-button type="primary">确 定</el-button>
  747. </span>
  748. </el-dialog>
  749. </div>
  750. </template>
  751. <script>
  752. export default {
  753. props: ["raceInfo"],
  754. data() {
  755. return {
  756. tableHeight: "500px",
  757. formLabelWidth: "100px",
  758. chooseType: 1,
  759. CourseType: [],
  760. CourseTypeJson: [],
  761. noneBtnImg: false,
  762. uploadLoading1: false,
  763. dialogVisibleMember: false,
  764. isAddOrUp: false,
  765. choosePicVisible: false,
  766. sysPicVisible: false,
  767. isSysPic: false,
  768. isAutor: false,
  769. isOther: false,
  770. sysPic: [],
  771. upIndex: -1,
  772. sName: "",
  773. sSubject: "",
  774. sSchool: "",
  775. sEmail: "",
  776. sPhone: "",
  777. raceDetail: {
  778. title: "",
  779. type: [],
  780. typeOtherName: "",
  781. cover: [],
  782. autor: [],
  783. tableData: [],
  784. data: [],
  785. },
  786. tx: require("../../../../assets/avatar.png"),
  787. ending: null,
  788. dragging: null,
  789. };
  790. },
  791. mounted() {
  792. this.$nextTick(function () {
  793. this.tableHeight =
  794. window.innerHeight - this.$refs.table.$el.offsetTop - 200;
  795. if (this.tableHeight <= 530) {
  796. this.tableHeight = 530;
  797. }
  798. // 监听窗口大小变化
  799. let self = this;
  800. window.onresize = function () {
  801. self.tableHeight =
  802. window.innerHeight - self.$refs.table.$el.offsetTop - 200;
  803. if (self.tableHeight <= 530) {
  804. self.tableHeight = 530;
  805. }
  806. };
  807. });
  808. },
  809. beforeRouteLeave(to, from, next) {
  810. window.onresize = null;
  811. next();
  812. },
  813. watch: {
  814. raceInfo: {
  815. immediate: true,
  816. deep: true,
  817. handler(newValue, oldValue) {
  818. this.getValue();
  819. },
  820. },
  821. },
  822. methods: {
  823. tableRowClassName({ row, rowIndex }) {
  824. // if ((rowIndex + 1) % 2 === 0) {
  825. // return "even_row";
  826. // } else {
  827. // return "";
  828. // }
  829. if (rowIndex === 0) {
  830. return "tr-blue";
  831. } else {
  832. return "";
  833. }
  834. },
  835. handlePictureCardPreview(file) {
  836. this.dialogImageUrl = file.url;
  837. },
  838. handleDragStart(e, item) {
  839. this.dragging = item;
  840. },
  841. handleDragEnd(e, item) {
  842. if (this.ending === this.dragging) {
  843. return;
  844. }
  845. let newItems = [...this.raceDetail.data];
  846. const src = newItems[this.dragging];
  847. const dst = newItems[this.ending];
  848. this.raceDetail.data[this.dragging] = dst;
  849. this.raceDetail.data[this.ending] = src;
  850. this.$forceUpdate();
  851. this.$nextTick(() => {
  852. this.dragging = null;
  853. this.ending = null;
  854. });
  855. },
  856. handleDragOver(e) {
  857. // 首先把div变成可以放置的元素,即重写dragenter/dragover
  858. // 在dragenter中针对放置目标来设置
  859. e.dataTransfer.dropEffect = "move";
  860. },
  861. handleDragEnter(e, item) {
  862. // 为需要移动的元素设置dragstart事件
  863. e.dataTransfer.effectAllowed = "move";
  864. this.ending = item;
  865. },
  866. onExceed() {
  867. this.$message.error("项目封面仅支持上传一张,请删除后再进行上传");
  868. },
  869. handleClose(done) {
  870. this.isAddOrUp = false;
  871. this.isAutor = false;
  872. done();
  873. },
  874. jump(t) {
  875. var a = document.getElementById(t);
  876. var b = document.getElementsByClassName("right")[0];
  877. b.scrollTop = a.offsetTop;
  878. },
  879. handle_remove1(file, fileList, type) {
  880. var _tmp = this.raceDetail.cover;
  881. for (var i = 0, len = _tmp.length; i < len; i++) {
  882. if (_tmp[i].uid == file.uid) {
  883. _tmp.splice(i, 1);
  884. break;
  885. }
  886. this.raceDetail.cover = _tmp;
  887. }
  888. this.noneBtnImg = _tmp.length >= 1;
  889. this.isSysPic = false;
  890. },
  891. addImg(e) {
  892. var el = e.currentTarget;
  893. el.getElementsByTagName("input")[0].click();
  894. e.target.value = "";
  895. },
  896. imgChange1(file, fileList, type, itemTaskIndex) {
  897. if (type == 1) {
  898. var _tmp = this.raceDetail.cover;
  899. }
  900. this.noneBtnImg = _tmp.length >= 1;
  901. },
  902. imgChange(file, fileList, type, jT) {
  903. var _tmp = this.raceDetail.data;
  904. this.noneBtnImg = _tmp.length >= 1;
  905. },
  906. deleteChapterData(e, i, t) {
  907. e.stopPropagation();
  908. this.raceDetail.data.splice(i, 1);
  909. },
  910. chooseSysPic(p) {
  911. if (this.raceDetail.cover.length == 0) {
  912. this.raceDetail.cover.push({
  913. name: "系统图片.png",
  914. url: p,
  915. });
  916. } else {
  917. console.log(this.raceDetail.cover);
  918. }
  919. this.imgChange1(null, null, 1, null);
  920. this.isSysPic = true;
  921. this.sysPicVisible = false;
  922. },
  923. deleteSysPic() {
  924. this.raceDetail.cover = [];
  925. this.isSysPic = false;
  926. },
  927. getChoosePic(t) {
  928. this.chooseType = t;
  929. this.getAllBanner();
  930. },
  931. beforeUpload1(event, type) {
  932. const loading = this.openLoading();
  933. var file = event.target.files[0];
  934. var credentials = {
  935. accessKeyId: "AKIATLPEDU37QV5CHLMH",
  936. secretAccessKey: "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",
  937. }; //秘钥形式的登录上传
  938. window.AWS.config.update(credentials);
  939. window.AWS.config.region = "cn-northwest-1"; //设置区域
  940. var bucket = new window.AWS.S3({ params: { Bucket: "ccrb" } }); //选择桶
  941. var _this = this;
  942. if (file) {
  943. var params = {
  944. Key:
  945. file.name.split(".")[0] +
  946. new Date().getTime() +
  947. "." +
  948. file.name.split(".")[file.name.split(".").length - 1],
  949. ContentType: file.type,
  950. Body: file,
  951. "Access-Control-Allow-Credentials": "*",
  952. ACL: "public-read",
  953. }; //key可以设置为桶的相抵路径,Body为文件, ACL最好要设置
  954. var options = {
  955. partSize: 2048 * 1024 * 1024,
  956. queueSize: 2,
  957. leavePartsOnError: true,
  958. };
  959. bucket
  960. .upload(params, options)
  961. .on("httpUploadProgress", function (evt) {
  962. //这里可以写进度条
  963. // console.log("Uploaded : " + parseInt((evt.loaded * 80) / evt.total) + '%');
  964. })
  965. .send(function (err, data) {
  966. loading.close();
  967. if (err) {
  968. var a = _this.$refs.upload1.uploadFiles;
  969. a.splice(a.length - 1, a.length);
  970. _this.$message.error("上传失败");
  971. } else {
  972. if (file.name.indexOf("微信图片") != -1) {
  973. _this.raceDetail.cover.push({
  974. name: "图片.png",
  975. url: data.Location,
  976. });
  977. } else {
  978. _this.raceDetail.cover.push({
  979. name: file.name,
  980. url: data.Location,
  981. });
  982. }
  983. _this.imgChange1(null, null, 1, null);
  984. _this.choosePicVisible = false;
  985. console.log(data.Location);
  986. }
  987. });
  988. }
  989. },
  990. beforeUpload(event, type, jsonType) {
  991. var file = event.target.files[0];
  992. var credentials = {
  993. accessKeyId: "AKIATLPEDU37QV5CHLMH",
  994. secretAccessKey: "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",
  995. }; //秘钥形式的登录上传
  996. window.AWS.config.update(credentials);
  997. window.AWS.config.region = "cn-northwest-1"; //设置区域
  998. var type1 = type;
  999. let bucket = new window.AWS.S3({ params: { Bucket: "ccrb" } }); //选择桶
  1000. var _this = this;
  1001. var b = [
  1002. "DOC",
  1003. "DOCX",
  1004. "DOCM",
  1005. "DOTM",
  1006. "DOTX",
  1007. "PPTX",
  1008. "PPSX",
  1009. "PPT",
  1010. "PPS",
  1011. "PPTM",
  1012. "POTM",
  1013. "PPAM",
  1014. "POTX",
  1015. "PPSM",
  1016. ];
  1017. var c = ["PDF", "DOT", "DOC", "DOCX", "PPT", "PPTX", "XLSX", "XLS"];
  1018. var d = [
  1019. "BMP",
  1020. "PJP",
  1021. "APNG",
  1022. "PNG",
  1023. "JPG",
  1024. "GIF",
  1025. "SVG",
  1026. "JPEG",
  1027. "JPG",
  1028. "ICO",
  1029. "PGPEG",
  1030. "AVIF",
  1031. ];
  1032. // if (
  1033. // b.indexOf(
  1034. // file.name
  1035. // .split(".")
  1036. // [file.name.split(".").length - 1].toLocaleUpperCase()
  1037. // ) != -1
  1038. // ) {
  1039. // if (file.size / 1024 / 1024 > 10) {
  1040. // this.$message.error("上传文件大于10M,请重新选择文件!");
  1041. // return;
  1042. // }
  1043. // } else if (
  1044. // c.indexOf(
  1045. // file.name
  1046. // .split(".")
  1047. // [file.name.split(".").length - 1].toLocaleUpperCase()
  1048. // ) != -1
  1049. // ) {
  1050. // if (file.size / 1024 / 1024 > 5) {
  1051. // this.$message.error("添加的上传文件大于5M,请重新选择文件!");
  1052. // return;
  1053. // }
  1054. // }
  1055. if (
  1056. file.name
  1057. .split(".")
  1058. [file.name.split(".").length - 1].toLocaleUpperCase() != "PDF" &&
  1059. file.name
  1060. .split(".")
  1061. [file.name.split(".").length - 1].toLocaleUpperCase() != "ZIP"
  1062. ) {
  1063. this.$message.error("请上传PDF或者ZIP文件!");
  1064. return;
  1065. }
  1066. if (
  1067. c.indexOf(
  1068. file.name
  1069. .split(".")
  1070. [file.name.split(".").length - 1].toLocaleUpperCase()
  1071. ) != -1
  1072. ) {
  1073. type1 = 1;
  1074. } else if (
  1075. d.indexOf(
  1076. file.name
  1077. .split(".")
  1078. [file.name.split(".").length - 1].toLocaleUpperCase()
  1079. ) != -1
  1080. ) {
  1081. type1 = 3;
  1082. } else {
  1083. type1 = 2;
  1084. }
  1085. _this.raceDetail.data.progress = 0;
  1086. _this.raceDetail.data.proVisible = true;
  1087. _this.raceDetail.data.isFinishSize = 0;
  1088. _this.raceDetail.data.isAllSize = 0;
  1089. // _this.$nextTick(() => {
  1090. // setTimeout(() => {
  1091. // document.getElementById("closePro").onclick = () => {
  1092. // bucket.abort.bind(bucket);
  1093. // };
  1094. // }, 500);
  1095. // });
  1096. var a = (file.size / 1024 / 1024).toFixed(2);
  1097. _this.raceDetail.data.isAllSize = a - 0;
  1098. _this.$forceUpdate();
  1099. if (file) {
  1100. var params = {
  1101. Key:
  1102. file.name.split(".")[0] +
  1103. new Date().getTime() +
  1104. "." +
  1105. file.name.split(".")[file.name.split(".").length - 1],
  1106. ContentType: file.type,
  1107. Body: file,
  1108. "Access-Control-Allow-Credentials": "*",
  1109. ACL: "public-read",
  1110. }; //key可以设置为桶的相抵路径,Body为文件, ACL最好要设置
  1111. var options = {
  1112. partSize: 2048 * 1024 * 1024,
  1113. queueSize: 2,
  1114. leavePartsOnError: true,
  1115. };
  1116. bucket
  1117. .upload(params, options)
  1118. .on("httpUploadProgress", function (evt) {
  1119. //这里可以写进度条
  1120. // console.log("Uploaded : " + parseInt((evt.loaded * 80) / evt.total) + '%');
  1121. _this.raceDetail.data.isFinishSize = (
  1122. evt.loaded /
  1123. 1024 /
  1124. 1024
  1125. ).toFixed(2);
  1126. _this.raceDetail.data.progress = parseInt(
  1127. (evt.loaded / evt.total) * 100
  1128. );
  1129. _this.$forceUpdate();
  1130. // _this.raceDetail.data.progress =
  1131. // Math.floor(
  1132. // (evt.loaded / 1024 / 1024 / (evt.total / 1024 / 1024)) * 100
  1133. // ) + "%";
  1134. })
  1135. .send(function (err, data) {
  1136. // loading.close();
  1137. _this.raceDetail.data.progress = 100;
  1138. _this.raceDetail.data.isFinishSize =
  1139. _this.raceDetail.data.isAllSize;
  1140. _this.$forceUpdate();
  1141. setTimeout(() => {
  1142. _this.raceDetail.data.proVisible = false;
  1143. _this.$forceUpdate();
  1144. }, 1000);
  1145. if (err) {
  1146. _this.$message.error("上传失败");
  1147. } else {
  1148. _this.raceDetail.data.push({
  1149. name: file.name,
  1150. url: data.Location,
  1151. type: type1,
  1152. id: "data" + _this.raceDetail.data.length,
  1153. });
  1154. _this.imgChange(null, null, type1, jsonType);
  1155. console.log(data.Location);
  1156. }
  1157. });
  1158. }
  1159. },
  1160. updateTitle() {
  1161. this.$emit("updateTitle", this.raceDetail);
  1162. },
  1163. updateType(sid) {
  1164. var a = this.raceDetail.type;
  1165. var c = [];
  1166. var b = sid.pid;
  1167. var d = [];
  1168. // for (var i = 0; i < this.CourseType[1].length; i++) {
  1169. // if (this.CourseType[1][i].id == sid) {
  1170. // b = this.CourseType[1][i].pid;
  1171. // }
  1172. // }
  1173. if (
  1174. b == "34629bcc-d02f-11ec-8c78-005056b86db5" &&
  1175. a.indexOf(sid.id) != -1
  1176. ) {
  1177. for (var j = 0; j < this.CourseTypeJson[b].length; j++) {
  1178. d.push(this.CourseTypeJson[b][j].id);
  1179. }
  1180. for (var i = 0; i < a.length; i++) {
  1181. if (d.indexOf(a[i]) == -1) {
  1182. c.push(a[i]);
  1183. }
  1184. }
  1185. c.push(sid.id);
  1186. this.raceDetail.type = c;
  1187. }
  1188. },
  1189. isAddPPTeacher() {
  1190. if (this.isAutor == true) {
  1191. if (this.sName === "") {
  1192. this.$message.error("姓名不能为空");
  1193. return;
  1194. } else if (this.sSubject === "") {
  1195. this.$message.error("学科不能为空");
  1196. return;
  1197. } else if (this.sSchool === "") {
  1198. this.$message.error("学校不能为空");
  1199. return;
  1200. } else if (this.sPhone == "") {
  1201. this.$message.error("手机号不能为空");
  1202. return;
  1203. } else if (!/^1[3456789]\d{9}$/.test(this.sPhone)) {
  1204. this.$message.error("手机号格式不正确");
  1205. return;
  1206. } else if (this.sEmail == "") {
  1207. this.$message.error("邮箱不能为空");
  1208. return;
  1209. } else if (this.sEmail != "") {
  1210. if (
  1211. !/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/.test(
  1212. this.sEmail
  1213. )
  1214. ) {
  1215. this.$message.error("邮箱格式不正确");
  1216. return;
  1217. }
  1218. }
  1219. } else {
  1220. if (this.sName === "") {
  1221. this.$message.error("姓名不能为空");
  1222. return;
  1223. } else if (this.sPhone != "") {
  1224. if (!/^[1][3,4,5,7,8][0-9]{9}$/.test(this.sPhone)) {
  1225. this.$message.error("手机号格式不正确");
  1226. return;
  1227. }
  1228. } else if (this.sEmail != "") {
  1229. if (
  1230. !/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/.test(
  1231. this.sEmail
  1232. )
  1233. ) {
  1234. this.$message.error("邮箱格式不正确");
  1235. return;
  1236. }
  1237. }
  1238. }
  1239. if (this.isAutor == true) {
  1240. if (this.isAddOrUp == true) {
  1241. this.raceDetail.autor[0].sn = this.sName;
  1242. this.raceDetail.autor[0].su = this.sSubject;
  1243. this.raceDetail.autor[0].sc = this.sSchool;
  1244. this.raceDetail.autor[0].em = this.sEmail;
  1245. this.raceDetail.autor[0].ph = this.sPhone;
  1246. } else {
  1247. this.raceDetail.autor.push({
  1248. sn: this.sName,
  1249. su: this.sSubject,
  1250. sc: this.sSchool,
  1251. em: this.sEmail,
  1252. ph: this.sPhone,
  1253. });
  1254. }
  1255. } else {
  1256. if (this.isAddOrUp == true) {
  1257. this.raceDetail.tableData[this.upIndex].sn = this.sName;
  1258. this.raceDetail.tableData[this.upIndex].su = this.sSubject;
  1259. this.raceDetail.tableData[this.upIndex].sc = this.sSchool;
  1260. this.raceDetail.tableData[this.upIndex].em = this.sEmail;
  1261. this.raceDetail.tableData[this.upIndex].ph = this.sPhone;
  1262. } else {
  1263. this.raceDetail.tableData.push({
  1264. sn: this.sName,
  1265. su: this.sSubject,
  1266. sc: this.sSchool,
  1267. em: this.sEmail,
  1268. ph: this.sPhone,
  1269. });
  1270. }
  1271. }
  1272. this.sName = "";
  1273. this.sSubject = "";
  1274. this.sSchool = "";
  1275. this.sEmail = "";
  1276. this.sPhone = "";
  1277. this.isAddOrUp = false;
  1278. this.isAutor = false;
  1279. this.upIndex = -1;
  1280. this.dialogVisibleMember = false;
  1281. this.$emit("updateTitle", this.raceDetail);
  1282. },
  1283. updateStudent(r, i, t) {
  1284. this.sName = r.sn;
  1285. this.sSubject = r.su;
  1286. this.sSchool = r.sc;
  1287. this.sEmail = r.em;
  1288. this.sPhone = r.ph;
  1289. this.isAddOrUp = true;
  1290. if (t == 0) {
  1291. this.isAutor = true;
  1292. }
  1293. this.upIndex = i;
  1294. this.dialogVisibleMember = true;
  1295. },
  1296. deleteStudent(i, t) {
  1297. this.$confirm("确定删除此作者吗?", "提示", {
  1298. confirmButtonText: "确定",
  1299. cancelButtonText: "取消",
  1300. type: "warning",
  1301. })
  1302. .then(() => {
  1303. this.$message({
  1304. message: "删除成功",
  1305. type: "success",
  1306. });
  1307. if (t == 0) {
  1308. this.raceDetail.autor = [];
  1309. } else {
  1310. this.raceDetail.tableData.splice(i, 1);
  1311. }
  1312. this.$emit("updateTitle", this.raceDetail);
  1313. })
  1314. .catch(() => {});
  1315. },
  1316. selectType() {
  1317. this.ajax
  1318. .get(this.$store.state.api + "selectMatTypeYT")
  1319. .then((res) => {
  1320. this.CourseType = res.data;
  1321. for (var i = 0; i < res.data[0].length; i++) {
  1322. if (!this.cid) {
  1323. this.raceDetail.type[res.data[0][i].id] = "";
  1324. }
  1325. for (var j = 0; j < res.data[1].length; j++) {
  1326. if (res.data[0][i].id == res.data[1][j].pid) {
  1327. if (!this.CourseTypeJson[res.data[0][i].id]) {
  1328. this.CourseTypeJson[res.data[0][i].id] = [];
  1329. }
  1330. this.CourseTypeJson[res.data[0][i].id].push(res.data[1][j]);
  1331. }
  1332. }
  1333. }
  1334. })
  1335. .catch((err) => {
  1336. console.error(err);
  1337. });
  1338. },
  1339. getAllBanner() {
  1340. this.sysPicVisible = true;
  1341. let params = {
  1342. t: this.chooseType,
  1343. };
  1344. this.ajax
  1345. .get(this.$store.state.api + "selectAllBanner", params)
  1346. .then((res) => {
  1347. this.sysPic = res.data[0];
  1348. })
  1349. .catch((err) => {
  1350. console.error(err);
  1351. });
  1352. },
  1353. getValue() {
  1354. this.raceDetail.title = this.raceInfo.title;
  1355. this.raceDetail.type = this.raceInfo.type;
  1356. this.raceDetail.typeOtherName = this.raceInfo.typeOtherName;
  1357. this.raceDetail.cover = this.raceInfo.cover;
  1358. this.raceDetail.autor = this.raceInfo.autor;
  1359. this.raceDetail.tableData = this.raceInfo.tableData;
  1360. this.raceDetail.data = this.raceInfo.data;
  1361. this.imgChange1(null, null, 1, null);
  1362. this.$forceUpdate();
  1363. },
  1364. addAutor(t) {
  1365. if (t == 0) {
  1366. this.isAutor = true;
  1367. }
  1368. this.dialogVisibleMember = true;
  1369. },
  1370. upCd(e, i) {
  1371. e.stopPropagation();
  1372. if (i == 0) {
  1373. return;
  1374. }
  1375. var a = this.raceDetail.data[i - 1];
  1376. this.raceDetail.data[i - 1] = this.raceDetail.data[i];
  1377. this.raceDetail.data[i] = a;
  1378. this.$forceUpdate();
  1379. },
  1380. downCd(e, i) {
  1381. e.stopPropagation();
  1382. if (i == this.raceDetail.data.length - 1) {
  1383. return;
  1384. }
  1385. var a = this.raceDetail.data[i + 1];
  1386. this.raceDetail.data[i + 1] = this.raceDetail.data[i];
  1387. this.raceDetail.data[i] = a;
  1388. this.$forceUpdate();
  1389. },
  1390. isNumber(e) {
  1391. if (e.includes(".")) {
  1392. this.$message.error("暂时不支持小数点评分");
  1393. this.raceDetail.typeOtherName = "";
  1394. } else {
  1395. let value = /^\d+$/.test(e);
  1396. if (value == true) {
  1397. if (e < 0) {
  1398. this.$message.error("请输入大于0的数值");
  1399. this.raceDetail.typeOtherName = "";
  1400. return;
  1401. } else if (e > 100) {
  1402. this.$message.error("数值不能大于100");
  1403. this.raceDetail.typeOtherName = "";
  1404. return;
  1405. }
  1406. } else {
  1407. this.raceDetail.typeOtherName = "";
  1408. this.$message.error("请输入数字");
  1409. return;
  1410. }
  1411. }
  1412. },
  1413. },
  1414. created() {
  1415. this.getValue();
  1416. this.selectType();
  1417. },
  1418. };
  1419. </script>
  1420. <style scoped>
  1421. @media screen and (max-width: 1280px) {
  1422. .upTips {
  1423. align-items: flex-start !important;
  1424. }
  1425. }
  1426. .dialog_diy >>> .el-dialog__header {
  1427. background: #3c3c3c !important;
  1428. padding: 15px 20px;
  1429. }
  1430. .dialog_diy >>> .el-dialog__title {
  1431. color: #fff;
  1432. }
  1433. .dialog_diy >>> .el-dialog__headerbtn {
  1434. top: 19px;
  1435. }
  1436. .dialog_diy >>> .el-dialog__headerbtn .el-dialog__close {
  1437. color: #fff;
  1438. }
  1439. .dialog_diy >>> .el-dialog__headerbtn .el-dialog__close:hover {
  1440. color: #fff;
  1441. }
  1442. .dialog_diy >>> .el-dialog__body,
  1443. .dialog_diy >>> .el-dialog__footer {
  1444. background: #fafafa;
  1445. }
  1446. .pb_content {
  1447. width: 100%;
  1448. height: 100%;
  1449. }
  1450. .race_content_body {
  1451. width: 100%;
  1452. position: relative;
  1453. margin: 0;
  1454. height: 100%;
  1455. }
  1456. .raceBox {
  1457. width: 100%;
  1458. height: 100%;
  1459. display: flex;
  1460. flex-direction: row;
  1461. flex-wrap: nowrap;
  1462. align-items: flex-start;
  1463. }
  1464. .stepBg {
  1465. font-size: 16px;
  1466. padding: 80px 0 0 0;
  1467. margin: 0 25px 0 0;
  1468. width: 15%;
  1469. display: flex;
  1470. justify-content: flex-start;
  1471. align-items: center;
  1472. flex-wrap: nowrap;
  1473. background: #fff;
  1474. /* min-height: 800px; */
  1475. height: calc(100% - 80px);
  1476. border-radius: 15px;
  1477. overflow: auto;
  1478. min-width: 260px;
  1479. flex-direction: column;
  1480. }
  1481. .steps {
  1482. display: flex;
  1483. flex-direction: row;
  1484. flex-wrap: nowrap;
  1485. position: relative;
  1486. width: 145px;
  1487. height: 130px;
  1488. }
  1489. .steps > div:nth-child(1) > img {
  1490. z-index: 9;
  1491. position: relative;
  1492. }
  1493. .stepLeft,
  1494. .isSteps {
  1495. width: 30px;
  1496. height: 30px;
  1497. border-radius: 50%;
  1498. text-align: center;
  1499. line-height: 30px;
  1500. border: 2px solid #eee;
  1501. color: #c0c0c0;
  1502. }
  1503. .isSteps {
  1504. background: #1990ff;
  1505. color: #fff;
  1506. border: none;
  1507. }
  1508. .stepRightNav {
  1509. display: flex;
  1510. flex-direction: column;
  1511. flex-wrap: nowrap;
  1512. justify-content: space-between;
  1513. align-items: flex-start;
  1514. margin: 10px 0 0 10px;
  1515. height: 40px;
  1516. cursor: pointer;
  1517. }
  1518. .stepRightNav > div {
  1519. margin-bottom: 5px;
  1520. }
  1521. .stepRightNav:hover {
  1522. color: #999;
  1523. }
  1524. .line,
  1525. .isLine {
  1526. position: absolute;
  1527. width: 5px;
  1528. height: 50px;
  1529. border-left: 1px solid #dadada;
  1530. top: 38px;
  1531. left: 15px;
  1532. }
  1533. .isLine {
  1534. border-left: 1px solid #1d92ff !important;
  1535. }
  1536. .right {
  1537. width: 100%;
  1538. background: rgb(255, 255, 255);
  1539. border-radius: 10px;
  1540. overflow: auto;
  1541. height: 100%;
  1542. border-radius: 15px;
  1543. /* max-height: 800px; */
  1544. }
  1545. .allBox {
  1546. padding: 25px;
  1547. }
  1548. .allBox > div:nth-child(1) {
  1549. color: #0f40f5;
  1550. font-size: 18px;
  1551. font-weight: bold;
  1552. }
  1553. .raceTop > div:nth-child(2) {
  1554. width: 80%;
  1555. margin-top: 10px;
  1556. }
  1557. .choose {
  1558. display: flex;
  1559. flex-direction: column;
  1560. flex-wrap: nowrap;
  1561. height: 100%;
  1562. justify-content: space-evenly;
  1563. align-items: flex-start;
  1564. }
  1565. .both {
  1566. display: flex;
  1567. flex-direction: row;
  1568. flex-wrap: wrap;
  1569. width: 100%;
  1570. align-items: center;
  1571. justify-content: flex-start;
  1572. margin: 30px 0;
  1573. }
  1574. .all_choose {
  1575. display: flex;
  1576. flex-direction: row;
  1577. align-items: flex-start;
  1578. width: 100%;
  1579. }
  1580. .all_choose > span {
  1581. width: 60px;
  1582. /* display: block;
  1583. letter-spacing: 33px;
  1584. white-space: nowrap;
  1585. overflow: hidden;
  1586. text-overflow: ellipsis; */
  1587. }
  1588. .all_choose >>> .el-checkbox-group {
  1589. display: flex;
  1590. flex-direction: row;
  1591. width: 95%;
  1592. flex-wrap: wrap;
  1593. align-content: center;
  1594. justify-content: flex-start;
  1595. align-items: center;
  1596. margin-top: 3px;
  1597. }
  1598. .all_choose > .el-checkbox-group >>> .el-checkbox {
  1599. margin-bottom: 10px;
  1600. display: flex;
  1601. flex-direction: row;
  1602. align-items: center;
  1603. }
  1604. .all_choose > .el-checkbox-group > .el-checkbox >>> .el-checkbox__label {
  1605. width: 85px;
  1606. min-width: 85px;
  1607. /* min-width: 80px;
  1608. overflow: hidden; */
  1609. /* width: 80px; */
  1610. /* text-overflow: ellipsis;
  1611. white-space: nowrap; */
  1612. }
  1613. .all_choose > .el-checkbox-group > .el-checkbox >>> .el-checkbox__label:hover {
  1614. width: auto;
  1615. }
  1616. .disUoloadSty >>> .el-icon-plus {
  1617. display: none !important;
  1618. /* 上传按钮隐藏 */
  1619. }
  1620. .upCss {
  1621. display: flex;
  1622. flex-direction: row;
  1623. justify-content: flex-start;
  1624. }
  1625. .upCss >>> .el-icon-plus {
  1626. position: none !important;
  1627. width: 200px;
  1628. height: 100px;
  1629. display: flex;
  1630. flex-wrap: nowrap;
  1631. flex-direction: column;
  1632. align-items: center;
  1633. justify-content: center;
  1634. border: 1px dashed #ccc;
  1635. min-width: 78px;
  1636. min-height: 100px;
  1637. z-index: 999;
  1638. }
  1639. .upCss >>> .el-upload-list__item-name {
  1640. width: 100px;
  1641. white-space: nowrap;
  1642. overflow: hidden;
  1643. text-overflow: ellipsis;
  1644. }
  1645. .upCss >>> .el-upload-list--picture .el-upload-list__item-thumbnail {
  1646. object-fit: cover;
  1647. }
  1648. .uploadFm {
  1649. border: 1px dashed #ccc;
  1650. width: 202px;
  1651. height: 102px;
  1652. position: relative;
  1653. cursor: pointer;
  1654. }
  1655. .uploadFm > img {
  1656. position: absolute;
  1657. top: 25px;
  1658. left: 35%;
  1659. width: 50px;
  1660. }
  1661. .picBox {
  1662. display: flex;
  1663. flex-direction: row;
  1664. flex-wrap: nowrap;
  1665. align-items: flex-start;
  1666. margin-top: 10px;
  1667. }
  1668. .picNav {
  1669. margin-left: 10px;
  1670. color: #aaabaa;
  1671. }
  1672. .addPeople {
  1673. color: #75a1f4;
  1674. padding: 10px 20px 10px 0;
  1675. float: right;
  1676. cursor: pointer;
  1677. }
  1678. .binfo_input {
  1679. font: inherit;
  1680. color: currentColor;
  1681. width: 100%;
  1682. margin: 0;
  1683. /* padding: 15px 14px; */
  1684. padding: 8px 14px;
  1685. display: block;
  1686. min-width: 0;
  1687. outline: none;
  1688. box-sizing: content-box;
  1689. background: none;
  1690. border: 1px solid rgba(0, 0, 0, 0.23);
  1691. border-radius: 4px;
  1692. box-sizing: border-box;
  1693. background: #fff;
  1694. font-size: 18px;
  1695. }
  1696. .binfo_input:focus-visible {
  1697. border: 1px solid rgba(61, 103, 188);
  1698. }
  1699. .secondTop {
  1700. width: 97%;
  1701. margin: 10px auto;
  1702. }
  1703. .tAreaCss >>> .el-textarea__inner {
  1704. resize: none;
  1705. font-size: 16px;
  1706. }
  1707. .tAreaCss >>> .el-textarea__inner {
  1708. font-family: "微软雅黑";
  1709. }
  1710. .addNewPP >>> .el-dialog__body {
  1711. padding: 5px 20px;
  1712. }
  1713. .customWidth >>> .el-dialog {
  1714. min-width: 500px !important;
  1715. }
  1716. .whiteBg {
  1717. background: #fff;
  1718. border-radius: 10px;
  1719. }
  1720. .right_title {
  1721. height: 30px;
  1722. padding: 15px 0 15px 20px;
  1723. border-bottom: 1px solid #f2f2f2;
  1724. font-size: 1.5em;
  1725. font-weight: bold;
  1726. color: #0f7eff;
  1727. margin: 0 auto;
  1728. }
  1729. .basic_box {
  1730. margin: 0 auto;
  1731. position: relative;
  1732. padding: 0 20px 0 20px;
  1733. }
  1734. .basic_box1 {
  1735. position: relative;
  1736. margin: 0;
  1737. min-height: 0;
  1738. width: 90%;
  1739. }
  1740. .left_first {
  1741. display: flex;
  1742. flex-direction: column;
  1743. flex-wrap: nowrap;
  1744. }
  1745. .bInfo_title {
  1746. text-align: left;
  1747. margin: 10px 0;
  1748. }
  1749. .fmBox {
  1750. padding: 10px 0 0 20px;
  1751. display: flex;
  1752. align-items: baseline;
  1753. justify-content: flex-start;
  1754. margin: 0 auto;
  1755. }
  1756. .logoImg {
  1757. width: 30px;
  1758. }
  1759. .logoImg > img {
  1760. width: 100%;
  1761. height: 100%;
  1762. }
  1763. .title_add_student {
  1764. margin: 0 auto;
  1765. color: #fff;
  1766. }
  1767. .add_input {
  1768. width: 365px;
  1769. }
  1770. .userImg {
  1771. display: flex;
  1772. flex-direction: row;
  1773. justify-content: center;
  1774. align-items: center;
  1775. }
  1776. .tx {
  1777. width: 40px;
  1778. margin-right: 10px;
  1779. }
  1780. .pb_buttonBox {
  1781. display: flex;
  1782. flex-direction: row;
  1783. flex-wrap: nowrap;
  1784. align-items: flex-start;
  1785. }
  1786. .delete {
  1787. width: 25px;
  1788. cursor: pointer;
  1789. margin-left: 10px;
  1790. }
  1791. .tx > img,
  1792. .delete > img {
  1793. width: 100%;
  1794. height: 100%;
  1795. }
  1796. .add_student >>> .el-dialog__header {
  1797. padding: 20px 20px 10px;
  1798. text-align: center;
  1799. background: #32455b;
  1800. }
  1801. .add_student >>> .el-dialog__title {
  1802. font-size: 14px !important;
  1803. color: #fff !important;
  1804. }
  1805. .add_student >>> .el-dialog__headerbtn {
  1806. font-size: 20px !important;
  1807. }
  1808. .add_student >>> .el-form-item__label {
  1809. margin-left: 65px;
  1810. }
  1811. .add_student >>> .el-form-item {
  1812. display: flex;
  1813. }
  1814. .add_student >>> .el-form-item__content {
  1815. margin: 0 !important;
  1816. }
  1817. .add_student >>> .el-dialog__footer {
  1818. text-align: center !important;
  1819. }
  1820. .header-title {
  1821. display: flex;
  1822. }
  1823. .stepBg .steps:nth-child(1) ::after,
  1824. .stepBg .steps:nth-child(2) ::after,
  1825. .stepBg .steps:nth-child(3) ::after,
  1826. .stepBg .steps:nth-child(4) ::after,
  1827. .stepBg .steps:nth-child(5) ::after {
  1828. content: "";
  1829. height: 100%;
  1830. background: #eee;
  1831. width: 4px;
  1832. position: absolute;
  1833. left: 15px;
  1834. top: calc(50% + (35px / 2));
  1835. transform: translateY(-50%);
  1836. z-index: 1;
  1837. }
  1838. .fileCss {
  1839. width: 100%;
  1840. display: flex;
  1841. flex-direction: row;
  1842. flex-wrap: nowrap;
  1843. justify-content: space-around;
  1844. align-items: center;
  1845. padding-top: 15px;
  1846. }
  1847. .sysPicBox {
  1848. display: flex;
  1849. flex-direction: row;
  1850. flex-wrap: wrap;
  1851. align-content: flex-start;
  1852. height: 435px;
  1853. overflow: auto;
  1854. }
  1855. .sysPic {
  1856. width: 200px;
  1857. height: 115px;
  1858. margin: 0 10px 20px 0;
  1859. cursor: pointer;
  1860. }
  1861. .sysPic > img,
  1862. .isSysPic > img,
  1863. .deletePic > img {
  1864. width: 100%;
  1865. height: 100%;
  1866. object-fit: cover;
  1867. }
  1868. .isSysPic {
  1869. width: 200px;
  1870. height: 115px;
  1871. position: relative;
  1872. }
  1873. .deletePic {
  1874. width: 20px;
  1875. height: 20px;
  1876. position: absolute;
  1877. top: 0;
  1878. right: 0;
  1879. cursor: pointer;
  1880. }
  1881. .cru_selectBox {
  1882. display: flex;
  1883. margin: 24px 0 10px;
  1884. flex-wrap: nowrap;
  1885. white-space: nowrap;
  1886. overflow: auto;
  1887. position: relative;
  1888. height: 47px;
  1889. }
  1890. .cru_selectBox::-webkit-scrollbar {
  1891. /*滚动条整体样式*/
  1892. width: 6px;
  1893. /*高宽分别对应横竖滚动条的尺寸*/
  1894. height: 6px;
  1895. }
  1896. /*定义滚动条轨道 内阴影+圆角*/
  1897. .cru_selectBox::-webkit-scrollbar-track {
  1898. border-radius: 10px;
  1899. background-color: #eee;
  1900. }
  1901. /*定义滑块 内阴影+圆角*/
  1902. .cru_selectBox::-webkit-scrollbar-thumb {
  1903. border-radius: 10px;
  1904. -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);
  1905. background-color: rgba(0, 0, 0, 0.1);
  1906. }
  1907. .cru_select {
  1908. font-size: 21px;
  1909. margin-right: 37px;
  1910. margin-left: 5px;
  1911. cursor: pointer;
  1912. color: #a6a6a6;
  1913. }
  1914. .cru_selected {
  1915. color: #0b7fc2 !important;
  1916. }
  1917. .info_btn {
  1918. color: #fff;
  1919. background-color: #0f7eff;
  1920. padding: 8px 24px;
  1921. font-size: 0.9375rem;
  1922. box-shadow: 0px 1px 3px 0px rgb(0 0 0 / 20%), 0px 2px 2px 0px rgb(0 0 0 / 14%),
  1923. 0px 3px 1px -2px rgb(0 0 0 / 12%);
  1924. min-width: 64px;
  1925. font-weight: 500;
  1926. border-radius: 4px;
  1927. box-sizing: border-box;
  1928. border: none;
  1929. cursor: pointer;
  1930. }
  1931. .raTable {
  1932. width: 97%;
  1933. margin: 0 auto;
  1934. height: auto;
  1935. }
  1936. .raTable >>> .el-table,
  1937. .raTable >>> .el-table__body-wrapper {
  1938. height: auto !important;
  1939. font-size: 16px !important;
  1940. }
  1941. .add_chapters_box {
  1942. text-align: left;
  1943. background-color: rgb(232 234 237);
  1944. width: 100%;
  1945. padding: 0px 15px;
  1946. border-radius: 15px;
  1947. font-size: 16px;
  1948. box-sizing: border-box;
  1949. position: relative;
  1950. padding: 0 10px 5px 10px;
  1951. height: 125px;
  1952. overflow-y: auto;
  1953. overflow-x: hidden;
  1954. }
  1955. .chapter_upload {
  1956. height: 50px;
  1957. margin-top: 8px;
  1958. position: relative;
  1959. display: flex;
  1960. align-items: center;
  1961. width: 100%;
  1962. min-height: 50px;
  1963. transition: all linear 0.3s;
  1964. }
  1965. .chapter_upload_t {
  1966. background-color: #fff;
  1967. position: absolute;
  1968. height: 100%;
  1969. top: 0px;
  1970. left: 0px;
  1971. border-radius: 40px;
  1972. box-sizing: border-box;
  1973. box-shadow: 0 0 3px 3px #dfdfdf;
  1974. width: 100%;
  1975. }
  1976. .chapter_upload_o {
  1977. width: 100%;
  1978. height: 100%;
  1979. position: relative;
  1980. z-index: 1;
  1981. display: flex;
  1982. align-items: center;
  1983. }
  1984. .chapter_upload_ic {
  1985. height: 30px;
  1986. float: right;
  1987. cursor: pointer;
  1988. position: absolute;
  1989. width: 45px;
  1990. right: 0;
  1991. top: 0;
  1992. }
  1993. .chapter_upload_ic_l {
  1994. width: 50px;
  1995. height: 50px;
  1996. float: left;
  1997. }
  1998. .chapter_upload_ic_l div {
  1999. width: 30px;
  2000. height: 35px;
  2001. background: url("../../../../assets/icon/icon.png");
  2002. }
  2003. .chapter_upload_ic_r {
  2004. width: 50px;
  2005. height: 50px;
  2006. float: left;
  2007. margin-left: 0px;
  2008. display: flex;
  2009. align-items: center;
  2010. position: absolute;
  2011. }
  2012. .chapter_upload_ic_r div {
  2013. width: 25px;
  2014. height: 25px;
  2015. background-image: url("../../../../assets/delete.png");
  2016. background-size: 100% 100%;
  2017. }
  2018. .chapter_upload_n {
  2019. display: flex;
  2020. text-indent: 10px;
  2021. text-decoration: none;
  2022. text-overflow: ellipsis;
  2023. white-space: nowrap;
  2024. overflow: hidden;
  2025. width: 55%;
  2026. margin-left: 10px;
  2027. cursor: pointer;
  2028. margin-top: 2px;
  2029. }
  2030. .chapter_upload_l_i1 {
  2031. background-image: url("../../../../assets/icon/video.png");
  2032. width: 28px;
  2033. height: 28px;
  2034. background-size: 100% 100%;
  2035. }
  2036. .chapter_upload_l_i5 {
  2037. background-image: url("../../../../assets/icon/word.png");
  2038. width: 24px;
  2039. height: 24px;
  2040. background-size: 100% 100%;
  2041. margin-left: 1px;
  2042. }
  2043. .chapter_upload_l_i8 {
  2044. background-image: url("../../../../assets/icon/line.png");
  2045. width: 24px;
  2046. height: 24px;
  2047. background-size: 100% 100%;
  2048. margin-left: 1px;
  2049. }
  2050. .chapter_upload_ud {
  2051. display: flex;
  2052. flex-direction: column;
  2053. margin-left: 5px;
  2054. justify-content: center;
  2055. z-index: 99;
  2056. }
  2057. .chapter_upload_up {
  2058. background-image: url("../../../../assets/icon/up.png");
  2059. width: 17px;
  2060. height: 15px;
  2061. background-size: 100% 100%;
  2062. cursor: pointer;
  2063. }
  2064. .chapter_upload_down {
  2065. background-image: url("../../../../assets/icon/down.png");
  2066. width: 17px;
  2067. height: 15px;
  2068. margin: 2px auto 0 auto;
  2069. background-size: 100% 100%;
  2070. cursor: pointer;
  2071. }
  2072. .chapter_upload_l {
  2073. padding: 1px 0 0 10px;
  2074. }
  2075. .first {
  2076. border: none;
  2077. outline: none;
  2078. width: 80%;
  2079. min-width: 215px;
  2080. z-index: 99;
  2081. font-size: 14px;
  2082. white-space: nowrap;
  2083. overflow: hidden;
  2084. text-overflow: ellipsis;
  2085. }
  2086. .add_info_box {
  2087. margin: 20px 0;
  2088. }
  2089. .add_info_box button {
  2090. margin: 0 10px 10px 0;
  2091. }
  2092. .mask {
  2093. background-color: rgb(0 0 0 / 30%);
  2094. /* position: fixed; */
  2095. position: absolute;
  2096. top: 0;
  2097. left: 0;
  2098. width: 100%;
  2099. height: 100%;
  2100. z-index: 20000;
  2101. display: flex;
  2102. align-items: center;
  2103. justify-content: center;
  2104. }
  2105. .progressBox {
  2106. width: 300px;
  2107. height: 150px;
  2108. background: #fff;
  2109. border-radius: 10px;
  2110. box-shadow: 0 0 6px 1px #bfbfbf;
  2111. display: flex;
  2112. align-items: center;
  2113. justify-content: center;
  2114. flex-direction: column;
  2115. position: relative;
  2116. }
  2117. .progressBox >>> .el-progress-bar__outer {
  2118. background-color: #d1dfff !important;
  2119. }
  2120. .progressBox .lbox {
  2121. height: 50px;
  2122. font-size: 19px;
  2123. display: flex;
  2124. align-items: center;
  2125. color: #747474;
  2126. }
  2127. .progressBox .lbox img {
  2128. width: 40px;
  2129. margin-right: 20px;
  2130. }
  2131. .closeCss {
  2132. position: absolute;
  2133. top: 8px;
  2134. right: 8px;
  2135. cursor: pointer;
  2136. width: 20px;
  2137. height: 20px;
  2138. }
  2139. .closeCss > img {
  2140. width: 100%;
  2141. height: 100%;
  2142. }
  2143. .upTips {
  2144. display: flex;
  2145. flex-direction: row;
  2146. flex-wrap: nowrap;
  2147. align-items: baseline;
  2148. }
  2149. .upTips > div {
  2150. margin-left: 10px;
  2151. color: #999;
  2152. font-size: 14px;
  2153. }
  2154. .tableColor >>> .tr-blue {
  2155. color: #628ff3 !important;
  2156. }
  2157. .lxr {
  2158. color: #fff;
  2159. background: center center #4a54ff;
  2160. background-image: linear-gradient(315deg, #6772ff 0, #00f9e5 100%);
  2161. background-size: 104% 104%;
  2162. min-width: 50px;
  2163. margin-left: 3px;
  2164. border-radius: 3px;
  2165. }
  2166. .isFinishCss {
  2167. display: flex;
  2168. flex-direction: row;
  2169. flex-wrap: nowrap;
  2170. align-items: flex-end;
  2171. }
  2172. .isFinishCss > div:nth-child(2) {
  2173. margin-left: 5px;
  2174. color: #939393;
  2175. }
  2176. .isFinish {
  2177. width: 16px;
  2178. height: 16px;
  2179. margin-top: 5px;
  2180. }
  2181. .isFinish > img {
  2182. width: 100%;
  2183. height: 100%;
  2184. }
  2185. .fontWidth {
  2186. text-align: center;
  2187. white-space: nowrap;
  2188. overflow: hidden;
  2189. text-overflow: ellipsis;
  2190. }
  2191. </style>