index.vue 75 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309
  1. <template>
  2. <div class="pb_content" style="height: auto; width: calc(100% - 40px); margin: 0 auto;background: unset;">
  3. <div style="width:100%;padding:0;box-sizing: border-box;">
  4. <div class="pb_head top">
  5. <div style="display: flex;align-items: center;">
  6. <span class="sub_head">表单管理</span>
  7. <!-- v-show="oid == '4c686762-1d0a-11ed-8c78-005056b86db5'" -->
  8. <span class="subClick" @click="
  9. goTo(
  10. '/trainCourse?userid=' +
  11. userid +
  12. '&oid=' +
  13. oid +
  14. '&org=' +
  15. org +
  16. '&role=' +
  17. role
  18. )
  19. ">培训管理</span>
  20. </div>
  21. </div>
  22. </div>
  23. <div class="bbox_nav">
  24. <span class="active">个人总览</span>
  25. </div>
  26. <div class="bbox">
  27. <div class="test_data_box" v-loading="isLoadingData">
  28. <div class="data_box">
  29. <div class="left">
  30. <div class="title">表单状态总览</div>
  31. <div class="box">
  32. <span class="color1">{{ dataJ.doing }}个进行中</span>
  33. <span class="color5">{{ dataJ.nodo }}个未进行</span>
  34. <span class="color2">{{ dataJ.noLook }}个未发布</span>
  35. <span class="color3">{{ dataJ.is }}个已完成</span>
  36. <span class="color4">{{ dataJ.no }}个逾期</span>
  37. </div>
  38. </div>
  39. <div class="right">
  40. <pie-1 :dataJ="dataJ"></pie-1>
  41. </div>
  42. </div>
  43. <div class="data_box" v-show="false">
  44. <div class="left">
  45. <div class="title">教师完成情况</div>
  46. <div class="box">
  47. <span class="color1">{{ 10 }}个未完成</span>
  48. <span class="color2">{{ 8 }}个进行中</span>
  49. <span class="color3">{{ 6 }}个已完成</span>
  50. <span class="color4">{{ 7 }}个逾期</span>
  51. </div>
  52. </div>
  53. <div class="right">
  54. <pie-2></pie-2>
  55. </div>
  56. </div>
  57. <div class="data_box" v-if="typeArray.length">
  58. <div class="left">
  59. <div class="title">综合平均分</div>
  60. <div class="box2">
  61. <span>{{ zscore.toFixed(0) }}</span>
  62. </div>
  63. </div>
  64. <div class="right">
  65. <randar-1 :typeJArray="typeJArray"></randar-1>
  66. </div>
  67. </div>
  68. <div class="data_box" v-if="typeArray.length" style="flex-direction: column;">
  69. <div class="left" style="height: fit-content;text-align: left;width: 100%;">
  70. <div class="title" style="margin: 0;">逾期情况</div>
  71. <!-- <div class="box2">
  72. <span>{{ 12 }}%</span>
  73. </div> -->
  74. </div>
  75. <div class="right" style="height: calc(100% - 20px);">
  76. <randar-2 :typeJArray="typeJArray"></randar-2>
  77. </div>
  78. </div>
  79. </div>
  80. <div class="search_nav">
  81. <div class="right">
  82. <span :class="{ active: stype == 1 }" @click="checkDataType(1)">按问卷查看</span>
  83. <span :class="{ active: stype == 2 }" @click="checkDataType(2)">按人员查看</span>
  84. </div>
  85. <div class="left">
  86. <span class="list" :class="{ active: stype2 == 1 }" @click="checkStype2(1)"></span>
  87. <span class="table" :class="{ active: stype2 == 2 }" @click="checkStype2(2)"></span>
  88. </div>
  89. </div>
  90. <div style="width: calc(100% - 20px);margin: 0 auto;">
  91. <div class="student_head">
  92. <div class="choose">
  93. <div class="student_search" v-if="typeArray.length && stype == 1">
  94. <el-select v-model="typeCheck" placeholder="请选择类型" clearable @change="search">
  95. <el-option v-for="(item, index) in typeArray" :key="index" :label="item.name"
  96. :value="item.id"></el-option>
  97. </el-select>
  98. </div>
  99. <div class="student_search" style="width:100px" v-if="stype == 1">
  100. <!-- <span></span> -->
  101. <el-select v-model="groupA" @change="search">
  102. <el-option value="0" label="我的"></el-option>
  103. <el-option value="2" label="他人"></el-option>
  104. <el-option value="4" label="所有人"></el-option>
  105. </el-select>
  106. </div>
  107. <!-- <div @click="clear" class="clear" v-if="CourseType.length">重置</div> -->
  108. </div>
  109. <div class="student_right">
  110. <div class="head_left">
  111. <div style="margin-right: 10px;position: relative;">
  112. <el-input v-model="courseName" class="student_input" placeholder="请输入项目名称"></el-input>
  113. <span class="serach_icon" @click="searchCourse"></span>
  114. </div>
  115. <!-- <el-button type="primary" @click="searchCourse">查询</el-button> -->
  116. <el-button type="primary" class="bgColor" @click="openTestDataBoard()"
  117. v-if="oid == '4c686762-1d0a-11ed-8c78-005056b86db5'">表单看板</el-button>
  118. <el-button type="primary" class="bgColor" @click="goToCourse()">新建表单</el-button>
  119. </div>
  120. </div>
  121. </div>
  122. </div>
  123. <div class="pb_content_body" style="height: 100%;width: 100%;">
  124. <div class="student_table" v-loading="isLoading" v-if="stype == 1 && stype2 == 1">
  125. <div class="course_box">
  126. <div class="test_box" v-for="(item, index) in course" :key="index">
  127. <div class="test_top">
  128. <div class="test_top_img" v-if="!item.typeN"></div>
  129. <el-tooltip :content="item.typeN" placement="top" effect="dark" v-else>
  130. <div class="test_top_img"
  131. :class="{ gr: item.typeid == 'afc3f97f-2429-408d-8dcd-5e63a44d355a', md: item.typeid == '478bcccd-e3a1-472b-aa29-3ed7bc479469', js: item.typeid == '178a377a-b4f1-4a75-b3c3-2787a7c98784', yy: item.typeid == 'dda9728e-5f11-469e-89ee-aca518daf223', bj: item.typeid == 'afc3f97f-2429-408d-8dcd-5e63a44d355c' }">
  132. </div>
  133. </el-tooltip>
  134. <div class="test_top_title">
  135. <span>{{ item.title }}</span>
  136. <!-- <span>创建人:{{ item.uname }}</span> -->
  137. <span>提交数量:{{ item.worksCount }}</span>
  138. </div>
  139. </div>
  140. <div class="test_time">
  141. <span><span>创建人</span></span><span>{{ item.uname }}</span>
  142. </div>
  143. <div class="test_time">
  144. <span><span>创建日期</span></span><span>{{ item.time }}</span>
  145. </div>
  146. <div class="test_time">
  147. <span><span>修改日期</span></span><span>{{ item.utime }}</span>
  148. </div>
  149. <div class="test_time">
  150. <span><span>截止日期</span></span><span>{{ item.overtime ? item.overtime : '未设置' }}</span>
  151. </div>
  152. <div class="test_time">
  153. <span><span>填写范围</span></span><el-tooltip :content="item.juriP ? item.juriP : '所有人'"
  154. placement="top" effect="dark">
  155. <!-- content to trigger tooltip here -->
  156. <span>{{ item.juriP ? item.juriP : '所有人' }}</span>
  157. </el-tooltip>
  158. </div>
  159. <div class="test_time tset_type" v-if="typeArray.length">
  160. <span><span>类型</span></span>
  161. <span v-if="!item.typeN">未设置类型</span>
  162. <span v-else>{{ item.typeN }}</span>
  163. </div>
  164. <!-- <div class="test_time">
  165. <span><span>分类</span></span>
  166. <span v-if="!item.typename">未设置分类</span>
  167. <el-tooltip :content="item.typename" placement="top" effect="dark" v-else>
  168. <span>{{ item.typename }}</span>
  169. </el-tooltip>
  170. </div> -->
  171. <div class="test_btn">
  172. <div class="test_o_btn">
  173. <el-tooltip content="编辑" placement="top" effect="dark">
  174. <span class="edit" @click="goToCourse2(item)" v-if="((item.userid == userid) ||
  175. (item.course_teacher &&
  176. item.course_teacher.indexOf(userid) !== -1) || role == '1')"></span>
  177. </el-tooltip>
  178. <el-tooltip content="查看" placement="top" effect="dark">
  179. <span class="check" @click="checkToTest(item.courseId)"></span>
  180. </el-tooltip>
  181. <el-tooltip content="复制" placement="top" effect="dark">
  182. <span class="copy" @click="copyTest(item.courseId)"></span>
  183. </el-tooltip>
  184. <el-tooltip content="提醒" placement="top" effect="dark">
  185. <span class="share" @click="shareTest(item)" v-if="((item.userid == userid) ||
  186. (item.course_teacher &&
  187. item.course_teacher.indexOf(userid) !== -1) || role == '1')"></span>
  188. </el-tooltip>
  189. <el-tooltip content="删除" placement="top" effect="dark">
  190. <span class="delete" @click="deleteCourse(item.courseId)" v-if="((item.userid == userid) ||
  191. (item.course_teacher &&
  192. item.course_teacher.indexOf(userid) !== -1) || role == '1')"></span>
  193. </el-tooltip>
  194. </div>
  195. <!-- <div class="test_type" :class="{ no: item.look == '1', is: item.look == '2' }"> -->
  196. <div class="test_type" :class="getLookType(item)">
  197. <!-- <span>{{ item.look == '1' ? '未发布' : '已发布' }}</span> -->
  198. <span>{{ getLook(item) }}</span>
  199. </div>
  200. </div>
  201. </div>
  202. <div class="course_empty" v-if="course.length == 0">暂无数据</div>
  203. </div>
  204. </div>
  205. <el-table ref="table" :data="course" border v-loading="isLoading" :key="1"
  206. :header-cell-style="{ color: '#00000066', fontSize: '16px', fontWeight: 'unset' }"
  207. :row-class-name="tableRowClassName2" v-if="stype == 1 && stype2 == 2" class="tableClass">
  208. <el-table-column label="序号" width="100px" align="center">
  209. <template slot-scope="scope">
  210. {{ scope.$index + 1 }}
  211. </template>
  212. </el-table-column>
  213. <el-table-column prop="title" label="问卷名称" min-width="150" align="center">
  214. </el-table-column>
  215. <el-table-column prop="uname" label="创建者" min-width="80" align="center">
  216. </el-table-column>
  217. <el-table-column v-if="typeArray.length" prop="typeN" label="问卷类型" min-width="80" align="center">
  218. <template slot-scope="scope">
  219. {{ scope.row.typeN ? scope.row.typeN : '未设置类型' }}
  220. </template>
  221. </el-table-column>
  222. <el-table-column prop="worksCount" label="已提交数量" min-width="80" align="center">
  223. </el-table-column>
  224. <el-table-column label="表单状态" min-width="80" align="center">
  225. <template slot-scope="scope">
  226. <!-- <div class="test_type2" style="width: fit-content;margin: 0 auto;" :class="{ no: scope.row.look == '1', is: scope.row.look == '2' }"> -->
  227. <div class="test_type2" style="width: fit-content;margin: 0 auto;"
  228. :class="getLookType(scope.row)">
  229. <!-- <span>{{ scope.row.look == '1' ? '未发布' : '已发布' }}</span> -->
  230. <span>{{ getLook(scope.row) }}</span>
  231. </div>
  232. </template>
  233. </el-table-column>
  234. <el-table-column label="操作" width="350px">
  235. <template slot-scope="scope">
  236. <el-button @click="goToCourse2(scope.row)" type="text" size="small" v-if="((scope.row.userid == userid) ||
  237. (scope.row.course_teacher &&
  238. scope.row.course_teacher.indexOf(userid) !== -1) || role == '1')">编辑</el-button>
  239. <el-button @click="checkToTest(scope.row.courseId)" type="text" size="small">查看</el-button>
  240. <el-button @click="copyTest(scope.row.courseId)" type="text" size="small">复制</el-button>
  241. <el-button @click="shareTest(scope.row)" type="text" size="small" v-if="((scope.row.userid == userid) ||
  242. (scope.row.course_teacher &&
  243. scope.row.course_teacher.indexOf(userid) !== -1) || role == '1')">提醒</el-button>
  244. <el-button @click="deleteCourse(scope.row.courseId)" type="text" size="small"
  245. style="color: #EE3E3E;"
  246. v-if="((scope.row.userid == userid) ||
  247. (scope.row.course_teacher &&
  248. scope.row.course_teacher.indexOf(userid) !== -1) || role == '1')">删除</el-button>
  249. </template>
  250. </el-table-column>
  251. </el-table>
  252. <div class="student_table" v-loading="isLoading" v-if="stype == 2 && stype2 == 1">
  253. <div class="course_box">
  254. <div class="test_box" v-for="(item, index) in course2" :key="index">
  255. <div class="test_top">
  256. <div class="test_top_img"></div>
  257. <div class="test_top_title">
  258. <span>{{ item.name }}</span>
  259. <!-- <span>创建人:{{ item.uname }}</span> -->
  260. <span>提交数量:{{ item.worksCount }}</span>
  261. </div>
  262. </div>
  263. <div class="test_time">
  264. <span><span>已完成表单</span></span><span>{{ item.testCount }}</span>
  265. </div>
  266. <div class="test_time">
  267. <span><span>教研室</span></span><el-tooltip :content="item.className ? item.className : '无'"
  268. placement="top" effect="dark">
  269. <!-- content to trigger tooltip here -->
  270. <span>{{ item.className ? item.className : '无' }}</span>
  271. </el-tooltip>
  272. </div>
  273. <div class="test_btn">
  274. <div class="test_o_btn">
  275. <el-tooltip content="查看" placement="top" effect="dark">
  276. <span class="check" @click="checkToTest2(item.userid)"></span>
  277. </el-tooltip>
  278. </div>
  279. </div>
  280. </div>
  281. <div class="course_empty" v-if="stype == 1 && course.length == 0">暂无数据</div>
  282. <div class="course_empty" v-if="stype == 2 && course2.length == 0">暂无数据</div>
  283. </div>
  284. </div>
  285. <el-table ref="table" :data="course2" border v-loading="isLoading" :key="2"
  286. :header-cell-style="{ color: '#00000066', fontSize: '16px', fontWeight: 'unset' }"
  287. :row-class-name="tableRowClassName2" v-if="stype == 2 && stype2 == 2" class="tableClass">
  288. <el-table-column label="序号" width="100px" align="center">
  289. <template slot-scope="scope">
  290. {{ scope.$index + 1 }}
  291. </template>
  292. </el-table-column>
  293. <el-table-column prop="name" label="教师姓名" min-width="80" align="center">
  294. </el-table-column>
  295. <el-table-column label="教研室" min-width="80" align="center">
  296. <template slot-scope="scope">
  297. {{ scope.row.className ? scope.row.className : '无' }}
  298. </template>
  299. </el-table-column>
  300. <el-table-column prop="worksCount" label="已提交数量" min-width="80" align="center">
  301. </el-table-column>
  302. <el-table-column prop="testCount" label="已完成表单" min-width="80" align="center">
  303. </el-table-column>
  304. <el-table-column label="操作" width="350px">
  305. <template slot-scope="scope">
  306. <el-button @click="checkToTest2(scope.row.userid)" type="text" size="small">详情</el-button>
  307. </template>
  308. </el-table-column>
  309. </el-table>
  310. </div>
  311. <div class="student_page">
  312. <el-pagination background layout="prev, pager, next" :page-size="pageSize" :total="total"
  313. v-if="stype == 1 && page && course.length" style="padding: 0 0 20px 0;"
  314. @current-change="handleCurrentChange"></el-pagination>
  315. <el-pagination background layout="prev, pager, next" :page-size="pageSize2" :total="total2"
  316. v-if="stype == 2 && page2 && course2.length" style="padding: 0 0 20px 0;"
  317. @current-change="handleCurrentChange2"></el-pagination>
  318. </div>
  319. </div>
  320. <el-dialog :visible.sync="dialogVisible1" size="tiny">
  321. <img width="100%" :src="dialogImageUrl" alt />
  322. </el-dialog>
  323. <el-dialog title="查看提问" :visible.sync="dialogVisible" :append-to-body="true" width="750px"
  324. :before-close="handleClose" class="dialog_diy">
  325. <div>
  326. <div class="a_addBox">
  327. <CourseProblem :problemCourse="problemCourse"></CourseProblem>
  328. </div>
  329. </div>
  330. <span slot="footer" class="dialog-footer">
  331. <el-button @click="dialogVisible = false">关 闭</el-button>
  332. </span>
  333. </el-dialog>
  334. <el-dialog title="查看协同项目" :visible.sync="dialogVisibleCourse" :append-to-body="true" width="850px"
  335. :before-close="handleClose" class="dialog_diy">
  336. <div class="ct_box">
  337. <div class="out_box" v-for="(item, index) in courseTeam" :key="index" style="margin-left: 15px">
  338. <div class="tup">
  339. <img :src="item.cover != null && item.cover != ''
  340. ? JSON.parse(item.cover).length > 0
  341. ? JSON.parse(item.cover)[0].url
  342. : mr
  343. : mr
  344. " alt />
  345. </div>
  346. <div class="bottom_box">
  347. <div>{{ item.title }}</div>
  348. <div class="kc_t">创建人:{{ item.uname }}</div>
  349. <div class="kc_time">{{ item.time }}</div>
  350. </div>
  351. <div class="three_bottom">
  352. <!-- <div @click="jump(item.courseId)">查看内容</div> -->
  353. <div @click="
  354. goTo(
  355. '/studentAddCourse?cid=' +
  356. item.courseId +
  357. '&userid=' +
  358. userid +
  359. '&oid=' +
  360. oid +
  361. '&org=' +
  362. org +
  363. '&role=' +
  364. role
  365. )
  366. ">
  367. 编辑
  368. </div>
  369. </div>
  370. </div>
  371. <div class="course_empty" v-if="courseTeam.length == 0">暂无数据</div>
  372. </div>
  373. <span slot="footer" class="dialog-footer">
  374. <el-button @click="dialogVisibleCourse = false">关 闭</el-button>
  375. </span>
  376. </el-dialog>
  377. <share-box :testJson="scid" :dialogVisibleShare.sync="dialogVisibleShare"></share-box>
  378. </div>
  379. </template>
  380. <script>
  381. import "../../../common/aws-sdk-2.235.1.min";
  382. import EditorBar from "../../../components/tools/wangEnduit";
  383. import CourseProblem from "../components/courseProblem";
  384. import pie2 from "./data/pie2.vue";
  385. import pie1 from "./data/pie1.vue";
  386. import randar1 from "./data/randar1.vue";
  387. import randar2 from "./data/randar2.vue";
  388. import shareBox from './shareBox/index.vue'
  389. export default {
  390. name: 'test',
  391. components: { EditorBar, CourseProblem, pie1, pie2, randar1, randar2, shareBox },
  392. data() {
  393. return {
  394. itemCount: 1,
  395. courseTitle: "",
  396. courseText: "",
  397. courseTime: "",
  398. isLoading: false,
  399. isLoadingData: false,
  400. fileList: [],
  401. fileList1: [],
  402. homeworkList: [{ name: "" }],
  403. formLabelWidth: "100px",
  404. dialogVisible: false,
  405. dialogVisible1: false,
  406. dialogVisibleCourse: false,
  407. dialogImageUrl: "",
  408. group: "",
  409. userid: this.$route.query.userid,
  410. oid: this.$route.query.oid,
  411. org: this.$route.query.org,
  412. role: this.$route.query.role,
  413. orgArray: ["150e3120-9195-11ed-b13d-005056b86db5"],
  414. oidArray: [],
  415. Juri: "",
  416. groupList: [],
  417. JuriList: [],
  418. page: 1,
  419. total: 0,
  420. pageSize: 20,
  421. tableData: [],
  422. now: "",
  423. courseDetail: {},
  424. addCourse: {},
  425. groupA: "0",
  426. classX: "",
  427. course: [],
  428. courseName: "",
  429. mr: require("../../../assets/icon/kc1.png"),
  430. CourseType: [],
  431. CourseTypeJson: {},
  432. courseTypeId: {},
  433. courseTypeSon: [],
  434. isChoose: 0,
  435. problemCourse: null, //查看提问的项目
  436. courseTeam: [],
  437. typeArray: [],
  438. typeCheck: "",
  439. stype: 1,
  440. stype2: 1,
  441. scid: {},
  442. dialogVisibleShare: false,
  443. page2: 1,
  444. total2: 0,
  445. pageSize2: 20,
  446. course2: [],
  447. dataJ: {},
  448. typeJArray: [],
  449. zscore: 0
  450. };
  451. },
  452. computed: {
  453. getLook() {
  454. return function (item) {
  455. let content = "";
  456. if (item.look == '1') {
  457. content = '未发布'
  458. }
  459. let now = new Date().getTime()
  460. let isTime = item.over_at && new Date(item.over_at).getTime()
  461. if (item.over_at && item.look == '2' && now > isTime && ((item.isUserCount > 0 && item.isUserCount > item.worksPerson) || item.isUserCount == 0)) {
  462. content = '逾期'
  463. }
  464. if (((item.over_at && item.look == '2' && isTime > now) || (!item.over_at && item.look == '2')) && ((item.isUserCount == 0 && item.worksPerson > 0) || (item.isUserCount > 0 && 0 < item.worksPerson && item.worksPerson < item.isUserCount))) {
  465. content = '进行中'
  466. }
  467. if (((item.over_at && item.look == '2' && isTime > now) || (!item.over_at && item.look == '2')) && item.worksPerson == 0) {
  468. content = '未进行'
  469. }
  470. if (item.look == '2' && (item.isUserCount > 0 && item.isUserCount <= item.worksPerson)) {
  471. content = '已完成'
  472. }
  473. return content;
  474. };
  475. },
  476. getLookType() {
  477. return function (item) {
  478. let content = "";
  479. if (item.look == '1') {
  480. // content = '未发布'
  481. content = 'no'
  482. }
  483. let now = new Date().getTime()
  484. let isTime = item.over_at && new Date(item.over_at).getTime()
  485. if (item.over_at && item.look == '2' && now > isTime && ((item.isUserCount > 0 && item.isUserCount > item.worksPerson) || item.isUserCount == 0)) {
  486. // content = '逾期'
  487. content = 'noTime'
  488. }
  489. if (((item.over_at && item.look == '2' && isTime > now) || (!item.over_at && item.look == '2')) && ((item.isUserCount == 0 && item.worksPerson > 0) || (item.isUserCount > 0 && 0 < item.worksPerson && item.worksPerson < item.isUserCount))) {
  490. // content = '进行中'
  491. content = 'doing'
  492. }
  493. if (((item.over_at && item.look == '2' && isTime > now) || (!item.over_at && item.look == '2')) && item.worksPerson == 0) {
  494. // content = '未进行'
  495. content = 'nodo'
  496. }
  497. if (item.look == '2' && (item.isUserCount > 0 && item.isUserCount <= item.worksPerson)) {
  498. // content = '已完成'
  499. content = 'is'
  500. }
  501. return content;
  502. };
  503. }
  504. },
  505. methods: {
  506. random() {
  507. return Math.random().toString(36).substr(2);
  508. },
  509. tableRowClassName2({ row, rowIndex }) {
  510. if ((rowIndex + 1) % 2 === 0) {
  511. return "rowClass";
  512. } else {
  513. return "rowClass";
  514. }
  515. },
  516. change(val) {
  517. console.log(val);
  518. },
  519. time() {
  520. if (!this.now) {
  521. this.now = new Date().getTime();
  522. return true;
  523. } else {
  524. let time = new Date().getTime();
  525. if (time - this.now > 3000) {
  526. this.now = time;
  527. return true;
  528. } else {
  529. return false;
  530. }
  531. }
  532. },
  533. addHomeworkBox() {
  534. this.homeworkList.push({ name: "" });
  535. this.itemCount++;
  536. },
  537. reduceHomeworkBox() {
  538. var a = this.homeworkList;
  539. a.splice(a.length - 1);
  540. this.itemCount--;
  541. },
  542. goTo(path) {
  543. this.$router.push(path);
  544. },
  545. goToCourse(courseId) {
  546. if (courseId) {
  547. this.$router.push(
  548. "/addTest?cid=" +
  549. courseId +
  550. "&userid=" +
  551. this.userid +
  552. "&oid=" +
  553. this.oid +
  554. "&org=" +
  555. this.org +
  556. "&role=" +
  557. this.role
  558. );
  559. } else {
  560. this.$router.push(
  561. "/addTest?userid=" +
  562. this.userid +
  563. "&oid=" +
  564. this.oid +
  565. "&org=" +
  566. this.org +
  567. "&role=" +
  568. this.role
  569. );
  570. }
  571. // this.$router.push(path);
  572. },
  573. goToCourse2(item) {
  574. if (item.worksCount > 0) {
  575. this.$confirm("该表单已存在数据,如果修改题目可能会清空已提交数据,是否重新编辑?", "提示", {
  576. confirmButtonText: "确定",
  577. cancelButtonText: "取消",
  578. type: "warning",
  579. })
  580. .then(() => {
  581. this.$router.push(
  582. "/addTest?cid=" +
  583. item.courseId +
  584. "&userid=" +
  585. this.userid +
  586. "&oid=" +
  587. this.oid +
  588. "&org=" +
  589. this.org +
  590. "&type=2" +
  591. "&role=" +
  592. this.role
  593. );
  594. })
  595. .catch(() => {
  596. return;
  597. });
  598. } else {
  599. this.$router.push(
  600. "/addTest?cid=" +
  601. item.courseId +
  602. "&userid=" +
  603. this.userid +
  604. "&oid=" +
  605. this.oid +
  606. "&org=" +
  607. this.org +
  608. "&type=2" +
  609. "&role=" +
  610. this.role
  611. );
  612. }
  613. },
  614. checkToTest(cid) {
  615. this.$router.push(
  616. "/checkToTest?cid=" +
  617. cid +
  618. "&userid=" +
  619. this.userid +
  620. "&oid=" +
  621. this.oid +
  622. "&org=" +
  623. this.org +
  624. "&type=2" +
  625. "&role=" +
  626. this.role
  627. );
  628. },
  629. checkToTest2(uid) {
  630. this.$router.push(
  631. "/checkToTest2?uid=" +
  632. uid +
  633. "&userid=" +
  634. this.userid +
  635. "&oid=" +
  636. this.oid +
  637. "&org=" +
  638. this.org +
  639. "&type=2" +
  640. "&role=" +
  641. this.role
  642. );
  643. },
  644. tableRowClassName({ row, rowIndex }) {
  645. if ((rowIndex + 1) % 2 === 0) {
  646. return "even_row";
  647. } else {
  648. return "";
  649. }
  650. },
  651. jump(cid) {
  652. // window.open(
  653. // "//pbl.cocorobo.cn/pbl-student-table/dist/#/courseDetail?courseId=" +
  654. // cid +
  655. // "&userid=" +
  656. // this.userid
  657. // );
  658. window.parent.postMessage({ cid: cid, screenType: "2s" }, "*");
  659. },
  660. get(cid) {
  661. window.parent.postMessage({ cid: cid, screenType: "3s" }, "*");
  662. },
  663. openTestDataBoard() {
  664. window.parent.postMessage({ tools: "dataBoardTest" }, "*");
  665. },
  666. getA(cid) {
  667. this.$router.push("/courseProgress?cid=" + cid + "&userid=" +
  668. this.userid +
  669. "&oid=" +
  670. this.oid +
  671. "&org=" +
  672. this.org)
  673. },
  674. handle_remove(file, fileList) {
  675. var _tmp = this.fileList;
  676. for (var i = 0, len = _tmp.length; i < len; i++) {
  677. if (_tmp[i].uid == file.uid) {
  678. _tmp.splice(i, 1);
  679. break;
  680. }
  681. this.fileList = _tmp;
  682. }
  683. },
  684. handle_remove1(file, fileList) {
  685. var _tmp = this.fileList1;
  686. for (var i = 0, len = _tmp.length; i < len; i++) {
  687. if (_tmp[i].uid == file.uid) {
  688. _tmp.splice(i, 1);
  689. break;
  690. }
  691. this.fileList1 = _tmp;
  692. }
  693. },
  694. handleCurrentChange(val) {
  695. // console.log(`当前页: ${val}`);
  696. this.page = val;
  697. this.getCourse();
  698. },
  699. handleCurrentChange2(val) {
  700. this.page2 = val
  701. this.getCourse2();
  702. },
  703. init() { },
  704. handleClose(done) {
  705. done();
  706. },
  707. handleRemove(file, fileList) {
  708. console.log(file, fileList);
  709. },
  710. handlePictureCardPreview(file) {
  711. this.dialogImageUrl = file.url;
  712. this.dialogVisible1 = true;
  713. },
  714. onExceed() {
  715. this.$message.error("项目海报仅支持上传一张,请删除后再进行上传");
  716. },
  717. //uuid生成
  718. guid() {
  719. return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(
  720. /[xy]/g,
  721. function (c) {
  722. var r = (Math.random() * 16) | 0,
  723. v = c == "x" ? r : (r & 0x3) | 0x8;
  724. return v.toString(16);
  725. }
  726. );
  727. },
  728. time() {
  729. if (!this.now) {
  730. this.now = new Date().getTime();
  731. return true;
  732. } else {
  733. let time = new Date().getTime();
  734. if (time - this.now > 3000) {
  735. this.now = time;
  736. return true;
  737. } else {
  738. return false;
  739. }
  740. }
  741. },
  742. searchCourse() {
  743. if (this.stype == 1) {
  744. this.page = 1
  745. this.getCourse();
  746. } else if (this.stype == 2) {
  747. this.page2 = 1
  748. this.getCourse2();
  749. }
  750. },
  751. clear() {
  752. if (this.CourseType.length) {
  753. for (var i = 0; i < this.CourseType[0].length; i++) {
  754. this.courseTypeId[this.CourseType[0][i].id] = "";
  755. }
  756. }
  757. this.typeCheck = ''
  758. if (this.stype == 1) {
  759. this.page = 1
  760. this.getCourse();
  761. } else if (this.stype == 2) {
  762. this.page2 = 1
  763. this.getCourse2();
  764. }
  765. },
  766. getCourse() {
  767. var typeE = [];
  768. var typea, typeb, typec, typed, typef;
  769. if (this.isChoose == 1) {
  770. for (var i = 0; i < this.CourseType[0].length; i++) {
  771. if (this.courseTypeId[this.CourseType[0][i].id] == "1") {
  772. typeE.push(this.CourseType[0][i].id);
  773. } else if (this.courseTypeId[this.CourseType[0][i].id] != "") {
  774. if (this.CourseType[0][i].name == "年级") {
  775. typea = this.courseTypeId[this.CourseType[0][i].id];
  776. } else if (this.CourseType[0][i].name == "学科") {
  777. typeb = this.courseTypeId[this.CourseType[0][i].id];
  778. } else if (this.CourseType[0][i].name == "栏目") {
  779. typeb = this.courseTypeId[this.CourseType[0][i].id];
  780. } else if (this.CourseType[0][i].name == "学院") {
  781. typeb = this.courseTypeId[this.CourseType[0][i].id];
  782. } else if (this.CourseType[0][i].name == "新技能") {
  783. typec = this.courseTypeId[this.CourseType[0][i].id];
  784. } else if (this.CourseType[0][i].name == "赛道") {
  785. typed = this.courseTypeId[this.CourseType[0][i].id];
  786. } else if (this.CourseType[0][i].name == "项目类型") {
  787. typed = this.courseTypeId[this.CourseType[0][i].id];
  788. } else if (this.CourseType[0][i].name == "主题") {
  789. // typef = this.courseTypeId[this.CourseType[0][i].id];
  790. }
  791. this.courseTypeSon.push(
  792. this.courseTypeId[this.CourseType[0][i].id]
  793. );
  794. }
  795. }
  796. }
  797. this.isLoading = true;
  798. let params = {
  799. type: this.groupA,
  800. uid: this.userid,
  801. oid: this.oid,
  802. org: this.org,
  803. typea: typea != undefined ? typea : "",
  804. typeb: typeb != undefined ? typeb : "",
  805. typec: typec != undefined ? typec : "",
  806. typed: typed != undefined ? typed : "",
  807. typef: this.typeCheck,
  808. typeE: typeE.join(","),
  809. cu: "",
  810. cn: this.courseName,
  811. page: this.page,
  812. pageSize: this.pageSize,
  813. };
  814. this.ajax
  815. .get(this.$store.state.api + "selectTesttCourse", params)
  816. .then((res) => {
  817. this.isLoading = false;
  818. this.total = res.data[0].length > 0 ? res.data[0][0].num : 0;
  819. this.course = res.data[0];
  820. })
  821. .catch((err) => {
  822. this.isLoading = false;
  823. console.error(err);
  824. });
  825. },
  826. getCourse2() {
  827. this.isLoading = true;
  828. let params = {
  829. oid: this.oid,
  830. org: this.org,
  831. type: this.typeCheck,
  832. cn: this.courseName,
  833. page: this.page2,
  834. pageSize: this.pageSize2,
  835. };
  836. this.ajax
  837. .get(this.$store.state.api + "selectTesttCourse2", params)
  838. .then((res) => {
  839. this.isLoading = false;
  840. this.total2 = res.data[0].length > 0 ? res.data[0][0].num : 0;
  841. this.course2 = res.data[0];
  842. })
  843. .catch((err) => {
  844. this.isLoading = false;
  845. console.error(err);
  846. });
  847. },
  848. getData() {
  849. let params = {
  850. oid: this.oid,
  851. org: this.org,
  852. };
  853. this.ajax
  854. .get(this.$store.state.api + "testDataBoard", params)
  855. .then((res) => {
  856. this.isLoadingData = false;
  857. let test = res.data[0]
  858. let work = res.data[1]
  859. let dataJ = {
  860. doing: 0,
  861. nodo: 0,
  862. noLook: 0,
  863. is: 0,
  864. no: 0
  865. }
  866. for (var i = 0; i < test.length; i++) {
  867. if (test[i].look == '1') {
  868. dataJ.noLook++
  869. console.log('index-----------', i)
  870. }
  871. let now = new Date().getTime()
  872. let isTime = test[i].over_at && new Date(test[i].over_at).getTime()
  873. if (test[i].over_at && test[i].look == '2' && now > isTime && ((test[i].isUserCount > 0 && test[i].isUserCount > test[i].isWorkCount) || test[i].isUserCount == 0)) {
  874. dataJ.no++
  875. console.log('index-----------', i)
  876. }
  877. if (((test[i].over_at && test[i].look == '2' && isTime > now) || (!test[i].over_at && test[i].look == '2')) && ((test[i].isUserCount == 0 && test[i].isWorkCount > 0) || (test[i].isUserCount > 0 && 0 < test[i].isWorkCount && test[i].isWorkCount < test[i].isUserCount))) {
  878. dataJ.doing++
  879. console.log('index-----------', i)
  880. }
  881. if (((test[i].over_at && test[i].look == '2' && isTime > now) || (!test[i].over_at && test[i].look == '2')) && test[i].isWorkCount == 0) {
  882. dataJ.nodo++
  883. console.log('index-----------', i)
  884. }
  885. if (test[i].look == '2' && (test[i].isUserCount > 0 && test[i].isUserCount <= test[i].isWorkCount)) {
  886. dataJ.is++
  887. console.log('index-----------', i)
  888. }
  889. }
  890. this.dataJ = dataJ
  891. if (this.typeArray.length) {
  892. let typeJ = {}
  893. for (var i = 0; i < this.typeArray.length; i++) {
  894. typeJ[this.typeArray[i].id] = {
  895. name: this.typeArray[i].name,
  896. count: 0,
  897. scroe: 0,
  898. zcount: 0,
  899. kcount: 0
  900. }
  901. }
  902. typeJ['qita'] = {
  903. name: '其他',
  904. count: 0,
  905. scroe: 0,
  906. zcount: 0,
  907. kcount: 0
  908. }
  909. for (var i = 0; i < work.length; i++) {
  910. if (work[i].typeid) {
  911. let score = this.getScore(work[i].courseJson)
  912. typeJ[work[i].typeid].count++
  913. typeJ[work[i].typeid].scroe += score
  914. } else {
  915. let score = this.getScore(work[i].courseJson)
  916. typeJ['qita'].count++
  917. typeJ['qita'].scroe += score
  918. }
  919. }
  920. let typeJArray = Object.values(typeJ)
  921. let zscore = 0
  922. for (var i = 0; i < typeJArray.length; i++) {
  923. typeJArray[i].zcount = typeJArray[i].scroe ? Math.round(typeJArray[i].scroe / typeJArray[i].count) : 0
  924. zscore += typeJArray[i].zcount
  925. }
  926. this.zscore = zscore ? zscore / typeJArray.length : 0
  927. for (var i = 0; i < test.length; i++) {
  928. let now = new Date().getTime()
  929. let isTime = test[i].over_at && new Date(test[i].over_at).getTime()
  930. if (test[i].over_at && test[i].look == '2' && now > isTime && test[i].typeid && ((test[i].isUserCount > 0 && test[i].isUserCount > test[i].isWorkCount) || test[i].isUserCount == 0)) {
  931. typeJ[test[i].typeid].kcount++
  932. } else if (test[i].over_at && test[i].look == '1' && now > isTime && ((test[i].isUserCount > 0 && test[i].isUserCount > test[i].isWorkCount) || test[i].isUserCount == 0)) {
  933. typeJ['qita'].kcount++
  934. }
  935. }
  936. this.typeJArray = typeJArray
  937. }
  938. })
  939. .catch((err) => {
  940. this.isLoadingData = false;
  941. console.error(err);
  942. });
  943. },
  944. getScore(courseJson) {
  945. // let _array = JSON.parse(array)
  946. let _score = 0;
  947. let _array = JSON.parse(courseJson);
  948. for (var j = 0; j < _array.length; j++) {
  949. let el = _array[j];
  950. if ((el.ttype == 3 || el.ttype == 2) && el.array.length > 0) {
  951. for (var k = 0; k < el.array.length; k++) {
  952. let item = el.array[k];
  953. if (item.ttype == 2 && item.array.length > 0) {
  954. for (var z = 0; z < item.array.length; z++) {
  955. let item2 = item.array[z];
  956. if (item2.ttype == 1 && item2.json && item2.json.score2) {
  957. _score += parseInt(item2.json.score2);
  958. }
  959. }
  960. } else if (item.ttype == 1 && item.json && item.json.score2) {
  961. _score += parseInt(item.json.score2);
  962. }
  963. }
  964. } else if (el.ttype == 1 && el.json && el.json.score2) {
  965. _score += parseInt(el.json.score2);
  966. }
  967. }
  968. return _score ? _score : 0;
  969. },
  970. getTypeName() {
  971. this.$forceUpdate();
  972. this.page = 1;
  973. this.isChoose = 1;
  974. this.getCourse();
  975. },
  976. // searchCourse() {
  977. // this.isLoading = true;
  978. // let params = {
  979. // cu: "",
  980. // cn: this.courseName,
  981. // page: this.page,
  982. // };
  983. // this.ajax
  984. // .get(this.$store.state.api + "searchCourse", params)
  985. // .then((res) => {
  986. // this.isLoading = false;
  987. // this.total = res.data[0].length > 0 ? res.data[0][0].num : 0;
  988. // this.course = res.data[0];
  989. // })
  990. // .catch((err) => {
  991. // this.isLoading = false;
  992. // console.error(err);
  993. // });
  994. // },
  995. shareTest(cid) {
  996. this.scid = cid
  997. this.dialogVisibleShare = true
  998. },
  999. deleteCourse(cid) {
  1000. // if (this.time()) {
  1001. this.$confirm("确定删除此表单吗?", "提示", {
  1002. confirmButtonText: "确定",
  1003. cancelButtonText: "取消",
  1004. type: "warning",
  1005. })
  1006. .then(() => {
  1007. this.isLoading = true;
  1008. let params = [{
  1009. cid: cid,
  1010. }];
  1011. this.ajax
  1012. .post(this.$store.state.api + "deleteTestCourse", params)
  1013. .then((res) => {
  1014. this.isLoading = false;
  1015. this.$message.success("删除成功");
  1016. this.getCourse();
  1017. })
  1018. .catch((err) => {
  1019. loading.close();
  1020. this.isLoading = false;
  1021. console.error(err);
  1022. });
  1023. })
  1024. .catch(() => {
  1025. return;
  1026. });
  1027. // }
  1028. },
  1029. selectAllType() {
  1030. let params = {
  1031. org: this.org && this.org != "" ? this.org : "",
  1032. oid: this.oid && this.oid != "" ? this.oid : "",
  1033. };
  1034. this.ajax
  1035. .get(this.$store.state.api + "selectAllTypeT", params)
  1036. .then((res) => {
  1037. this.CourseType = res.data;
  1038. for (var i = 0; i < res.data[0].length; i++) {
  1039. if (res.data[0][i].id == "34629907-d02f-11ec-8c78-005056b86db5") {
  1040. res.data[0][i].name = "学科";
  1041. } else if (res.data[0][i].id == "34628934-d02f-11ec-8c78-005056b86db5") {
  1042. res.data[0][i].name = "年级";
  1043. }
  1044. if (!this.cid) {
  1045. this.courseTypeId[res.data[0][i].id] = '';
  1046. }
  1047. if (!this.CourseTypeJson[res.data[0][i].id]) {
  1048. this.CourseTypeJson[res.data[0][i].id] = [];
  1049. }
  1050. if (res.data[2].length == 0 && res.data[3].length == 0) {
  1051. // for (var j = 0; j < res.data[1].length; j++) {
  1052. // if (res.data[0][i].id == res.data[1][j].pid) {
  1053. // this.CourseTypeJson[res.data[0][i].id].push(res.data[1][j]); // 去除公共分类
  1054. // }
  1055. // }
  1056. // if(this.org == '150e3120-9195-11ed-b13d-005056b86db5'){
  1057. for (var j = 0; j < res.data[1].length; j++) {
  1058. if (res.data[0][i].id == res.data[1][j].pid) {
  1059. this.CourseTypeJson[res.data[0][i].id].push(res.data[1][j]); // 去除公共分类
  1060. }
  1061. }
  1062. // }else{
  1063. // this.CourseType = []
  1064. // }
  1065. } else {
  1066. if (res.data[2].length > 0) {
  1067. for (var j = 0; j < res.data[2].length; j++) {
  1068. if (res.data[0][i].id == res.data[2][j].pid) {
  1069. this.CourseTypeJson[res.data[0][i].id].push(res.data[2][j]); // 去除公共分类
  1070. }
  1071. }
  1072. }
  1073. if (res.data[3].length > 0) {
  1074. for (var j = 0; j < res.data[3].length; j++) {
  1075. if (res.data[0][i].id == res.data[3][j].pid) {
  1076. this.CourseTypeJson[res.data[0][i].id].push(res.data[3][j]); // 去除公共分类
  1077. }
  1078. }
  1079. }
  1080. }
  1081. }
  1082. })
  1083. .catch((err) => {
  1084. console.error(err);
  1085. });
  1086. },
  1087. selectTestType() {
  1088. this.isLoadingData = true
  1089. let params = {
  1090. oid: this.oid,
  1091. };
  1092. this.ajax
  1093. .get(this.$store.state.api + "selectTestType", params)
  1094. .then((res) => {
  1095. this.typeArray = res.data[0];
  1096. this.getData()
  1097. })
  1098. .catch((err) => {
  1099. console.error(err);
  1100. });
  1101. },
  1102. selectType() {
  1103. this.ajax
  1104. .get(this.$store.state.api + "selectStudentType")
  1105. .then((res) => {
  1106. this.CourseType = res.data;
  1107. for (var i = 0; i < res.data[0].length; i++) {
  1108. if (!this.cid) {
  1109. this.courseTypeId[res.data[0][i].id] = "";
  1110. }
  1111. if (this.oid == "69893dca-1d47-11ed-8c78-005056b86db5") {
  1112. if (res.data[0][i].name == "栏目") {
  1113. this.CourseType[0][i].name = "主题";
  1114. }
  1115. }
  1116. for (var j = 0; j < res.data[1].length; j++) {
  1117. if (res.data[0][i].id == res.data[1][j].pid) {
  1118. if (!this.CourseTypeJson[res.data[0][i].id]) {
  1119. this.CourseTypeJson[res.data[0][i].id] = [];
  1120. }
  1121. this.CourseTypeJson[res.data[0][i].id].push(res.data[1][j]); //去除公共分类
  1122. }
  1123. }
  1124. }
  1125. this.selectTypeByOid();
  1126. this.selectTypeByOrg();
  1127. })
  1128. .catch((err) => {
  1129. console.error(err);
  1130. });
  1131. },
  1132. selectTypeByOid() {
  1133. let params = {
  1134. oid: this.oid,
  1135. };
  1136. this.ajax
  1137. .get(this.$store.state.api + "selectStudentTypeByOid", params)
  1138. .then((res) => {
  1139. for (var i = 0; i < res.data[0].length; i++) {
  1140. for (var j = 0; j < res.data[1].length; j++) {
  1141. if (res.data[0][i].id == res.data[1][j].pid) {
  1142. if (!this.CourseTypeJson[res.data[0][i].id]) {
  1143. this.CourseTypeJson[res.data[0][i].id] = [];
  1144. }
  1145. this.CourseTypeJson[res.data[0][i].id].push(res.data[1][j]);
  1146. }
  1147. }
  1148. }
  1149. this.$forceUpdate();
  1150. })
  1151. .catch((err) => {
  1152. console.error(err);
  1153. });
  1154. },
  1155. selectTypeByOrg() {
  1156. let params = {
  1157. oid: this.org,
  1158. };
  1159. this.ajax
  1160. .get(this.$store.state.api + "selectStudentTypeByOid", params)
  1161. .then((res) => {
  1162. for (var i = 0; i < res.data[0].length; i++) {
  1163. for (var j = 0; j < res.data[1].length; j++) {
  1164. if (res.data[0][i].id == res.data[1][j].pid) {
  1165. if (!this.CourseTypeJson[res.data[0][i].id]) {
  1166. this.CourseTypeJson[res.data[0][i].id] = [];
  1167. }
  1168. this.CourseTypeJson[res.data[0][i].id].push(res.data[1][j]);
  1169. }
  1170. }
  1171. }
  1172. this.$forceUpdate();
  1173. })
  1174. .catch((err) => {
  1175. console.error(err);
  1176. });
  1177. },
  1178. openCourse() {
  1179. this.dialogVisibleCourse = true;
  1180. this.getTeamCourse();
  1181. },
  1182. getTeamCourse() {
  1183. let params = {
  1184. uid: this.userid,
  1185. oid: this.oid,
  1186. };
  1187. this.ajax
  1188. .get(this.$store.state.api + "selectCourseTeam", params)
  1189. .then((res) => {
  1190. this.courseTeam = res.data[0];
  1191. })
  1192. .catch((err) => {
  1193. console.error(err);
  1194. });
  1195. },
  1196. checkStype2(type) {
  1197. if (this.stype2 != type) {
  1198. this.stype2 = type
  1199. }
  1200. },
  1201. checkDataType(type) {
  1202. if (this.stype != type) {
  1203. this.stype = type
  1204. if (type == 1) {
  1205. this.page = 1
  1206. this.getCourse()
  1207. } else {
  1208. this.page2 = 1
  1209. this.getCourse2()
  1210. }
  1211. }
  1212. },
  1213. search() {
  1214. if (this.stype == 1) {
  1215. this.page = 1
  1216. this.getCourse();
  1217. } else if (this.stype == 2) {
  1218. this.page2 = 1
  1219. this.getCourse2();
  1220. }
  1221. },
  1222. checkProblem(res) {
  1223. this.problemCourse = res;
  1224. this.dialogVisible = true;
  1225. },
  1226. copyTest(cid) {
  1227. let params = [{
  1228. cid: cid,
  1229. uid: this.userid
  1230. }]
  1231. this.ajax
  1232. .post(this.$store.state.api + "copyTest", params)
  1233. .then((res) => {
  1234. this.page = 1
  1235. if (this.role == "1") {
  1236. this.groupA = "0";
  1237. } else {
  1238. this.groupA = "0";
  1239. }
  1240. this.$message.success("复制成功")
  1241. this.clear()
  1242. })
  1243. .catch((err) => {
  1244. console.error(err);
  1245. });
  1246. }
  1247. },
  1248. activated() {
  1249. console.log(1);
  1250. this.selectAllType();
  1251. if (this.stype == 1) {
  1252. this.getCourse();
  1253. } else if (this.stype == 2) {
  1254. this.getCourse2();
  1255. }
  1256. this.selectTestType();
  1257. },
  1258. mounted() {
  1259. console.log(2);
  1260. if (this.role == '1') {
  1261. this.groupA = '0'
  1262. }
  1263. this.page = 1;
  1264. this.selectAllType();
  1265. if (this.stype == 1) {
  1266. this.getCourse();
  1267. } else if (this.stype == 2) {
  1268. this.getCourse2();
  1269. }
  1270. this.selectTestType();
  1271. },
  1272. };
  1273. </script>
  1274. <style scoped>
  1275. @media screen and (max-width: 1380px) {
  1276. .test_box {
  1277. width: calc(100% / 4 - (15px * 3) / 4) !important;
  1278. }
  1279. .test_box:nth-child(5n) {
  1280. margin-right: 15px !important;
  1281. }
  1282. .test_box:nth-child(4n) {
  1283. margin-right: 0 !important;
  1284. }
  1285. }
  1286. @media screen and (max-width: 1080px) {
  1287. .test_box {
  1288. width: calc(100% / 3 - (15px * 2) / 3) !important;
  1289. }
  1290. .test_box:nth-child(5n) {
  1291. margin-right: 15px !important;
  1292. }
  1293. .test_box:nth-child(4n) {
  1294. margin-right: 15px !important;
  1295. }
  1296. .test_box:nth-child(3n) {
  1297. margin-right: 0 !important;
  1298. }
  1299. }
  1300. .dialog_diy>>>.el-dialog__header {
  1301. background: #3d67bc !important;
  1302. padding: 15px 20px;
  1303. }
  1304. .dialog_diy>>>.el-dialog__title {
  1305. color: #fff;
  1306. }
  1307. .dialog_diy>>>.el-dialog__headerbtn {
  1308. top: 19px;
  1309. }
  1310. .dialog_diy>>>.el-dialog__headerbtn .el-dialog__close {
  1311. color: #fff;
  1312. }
  1313. .dialog_diy>>>.el-dialog__headerbtn .el-dialog__close:hover {
  1314. color: #fff;
  1315. }
  1316. .student_head>>>.el-button--primary {
  1317. background-color: #3681fc;
  1318. }
  1319. .xls_button {
  1320. font-size: 14px;
  1321. cursor: pointer;
  1322. text-decoration: underline;
  1323. color: rgb(34, 104, 188);
  1324. }
  1325. .student_head {
  1326. display: flex;
  1327. justify-content: space-between;
  1328. align-items: baseline;
  1329. flex-direction: row;
  1330. flex-wrap: wrap;
  1331. padding: 0 0 0;
  1332. }
  1333. .top {
  1334. display: flex;
  1335. justify-content: space-between;
  1336. width: 100% !important;
  1337. box-sizing: border-box;
  1338. margin: 0px auto;
  1339. padding: 10px 0;
  1340. height: 54px;
  1341. }
  1342. .bgColor {
  1343. background: #3681fc;
  1344. }
  1345. .student_search {
  1346. display: flex;
  1347. align-items: center;
  1348. /* width: calc(100% / 3); */
  1349. width: 190px;
  1350. }
  1351. .student_search span {
  1352. margin: 0 10px 0 0;
  1353. min-width: 50px;
  1354. text-align-last: justify;
  1355. }
  1356. .student_button {
  1357. display: flex;
  1358. overflow: hidden;
  1359. height: 40px;
  1360. }
  1361. .upload-demo {
  1362. display: flex;
  1363. flex-direction: column;
  1364. align-items: end;
  1365. /* position: relative; */
  1366. width: 100px;
  1367. overflow: hidden;
  1368. }
  1369. .student_table {
  1370. padding: 0 0;
  1371. height: 100%;
  1372. /* overflow: auto; */
  1373. min-height: 360px;
  1374. width: calc(100% - 20px);
  1375. margin: 0 auto;
  1376. }
  1377. .student_empty {
  1378. display: flex;
  1379. justify-content: center;
  1380. align-items: center;
  1381. }
  1382. .el-table>>>.even_row {
  1383. background-color: #f1f1f1;
  1384. }
  1385. .time {
  1386. font-size: 13px;
  1387. color: #999;
  1388. }
  1389. .course_button {
  1390. padding: 10px 20px;
  1391. }
  1392. .course_button_box {
  1393. display: flex;
  1394. margin-top: 5px;
  1395. justify-content: space-between;
  1396. }
  1397. .course_rate {
  1398. margin-top: 5px;
  1399. }
  1400. .course_view {
  1401. display: flex;
  1402. align-items: center;
  1403. margin: 5px 0 0 0;
  1404. }
  1405. .course_view i {
  1406. background-image: url("../../../assets/liulan.png");
  1407. width: 25px;
  1408. height: 25px;
  1409. background-size: 100% 100%;
  1410. /* margin-top: 1px; */
  1411. line-height: 25px;
  1412. vertical-align: text-top;
  1413. background-repeat: no-repeat;
  1414. }
  1415. .image {
  1416. width: 100%;
  1417. height: 150px;
  1418. display: block;
  1419. }
  1420. .course_box {
  1421. display: flex;
  1422. flex-wrap: wrap;
  1423. }
  1424. .student_page {
  1425. width: calc(100% - 20px);
  1426. margin: 0 auto;
  1427. display: flex;
  1428. justify-content: flex-end;
  1429. }
  1430. .course_create_box {
  1431. font-size: 18px;
  1432. }
  1433. .course_name {
  1434. margin-top: 10px;
  1435. }
  1436. .course_name span {
  1437. margin-bottom: 10px;
  1438. display: block;
  1439. }
  1440. .homework_box {
  1441. display: flex;
  1442. align-items: center;
  1443. flex-wrap: wrap;
  1444. }
  1445. .course_homework {
  1446. width: 130px;
  1447. display: flex;
  1448. justify-content: center;
  1449. flex-direction: column;
  1450. align-items: center;
  1451. margin: 0 10px 10px 0;
  1452. }
  1453. .course_type {
  1454. margin-top: 10px;
  1455. display: flex;
  1456. }
  1457. .course_type1 span {
  1458. margin-bottom: 10px;
  1459. display: block;
  1460. }
  1461. .course_type2 {
  1462. margin-left: 20px;
  1463. }
  1464. .course_type2 span {
  1465. margin-bottom: 10px;
  1466. display: block;
  1467. }
  1468. .course_empty {
  1469. color: rgb(110, 110, 110);
  1470. width: 100%;
  1471. height: 100%;
  1472. display: flex;
  1473. align-items: center;
  1474. justify-content: center;
  1475. }
  1476. .el_cards>>>.el-card__body {
  1477. height: 100%;
  1478. }
  1479. .courseBtnBox {
  1480. display: flex;
  1481. flex-direction: column;
  1482. justify-content: space-between;
  1483. height: calc(100% - 170px);
  1484. padding: 10px;
  1485. }
  1486. .wordUpload {
  1487. display: flex;
  1488. }
  1489. .wordUpload>.buttonUp {
  1490. margin-right: 5px;
  1491. }
  1492. .out_box {
  1493. display: flex;
  1494. flex-direction: column;
  1495. flex-wrap: nowrap;
  1496. width: 250px;
  1497. background: #fff;
  1498. margin-right: 25px;
  1499. border: 1px solid #ccc;
  1500. height: fit-content;
  1501. box-sizing: border-box;
  1502. border-radius: 0px 0px 5px 5px;
  1503. /* overflow: hidden; */
  1504. margin-bottom: 15px;
  1505. position: relative;
  1506. padding-top: 30px;
  1507. }
  1508. .bottom_box {
  1509. display: flex;
  1510. padding: 0 0 10px 10px;
  1511. flex-direction: column;
  1512. box-sizing: border-box;
  1513. height: 140px;
  1514. flex-wrap: nowrap;
  1515. justify-content: space-evenly;
  1516. }
  1517. .bottom_box>div:nth-child(1) {
  1518. width: 230px;
  1519. overflow: hidden;
  1520. display: flex;
  1521. align-items: center;
  1522. }
  1523. .bottom_box>div:nth-child(1) span:nth-child(1) {
  1524. font-weight: bold;
  1525. font-size: 18px;
  1526. overflow: hidden;
  1527. text-overflow: ellipsis;
  1528. white-space: nowrap;
  1529. max-width: 100%;
  1530. }
  1531. .bottom_box>div:nth-child(1) span:nth-child(2) {
  1532. font-size: 14px;
  1533. min-width: fit-content;
  1534. margin-left: 5px;
  1535. color: #0074ff;
  1536. }
  1537. .tup {
  1538. width: 100%;
  1539. height: 141.06px;
  1540. margin: 0 auto;
  1541. overflow: hidden;
  1542. display: flex;
  1543. align-items: center;
  1544. }
  1545. .tup>img {
  1546. width: 100%;
  1547. height: 100%;
  1548. object-fit: contain;
  1549. }
  1550. .kc_time {
  1551. margin-top: 8px;
  1552. font-size: 14px;
  1553. color: #999;
  1554. }
  1555. .kc_t {
  1556. margin-top: 5px;
  1557. width: 100%;
  1558. white-space: nowrap;
  1559. overflow: hidden;
  1560. text-overflow: ellipsis;
  1561. }
  1562. .three_bottom {
  1563. display: flex;
  1564. flex-direction: row;
  1565. justify-content: space-around;
  1566. height: 40px;
  1567. align-items: center;
  1568. background: #f5f4f4;
  1569. font-size: 14px;
  1570. }
  1571. .three_bottom>div {
  1572. cursor: pointer;
  1573. }
  1574. .three_bottom>div:hover {
  1575. color: #79a2ff;
  1576. }
  1577. .head_left {
  1578. display: flex;
  1579. margin-top: 15px;
  1580. }
  1581. .student_input>>>.el-input__inner {
  1582. height: 40px;
  1583. width: 190px;
  1584. font-size: 13px;
  1585. padding: 0 10px;
  1586. }
  1587. .course_button {
  1588. color: #fff;
  1589. background: #3681fc;
  1590. width: 75px;
  1591. height: 40px;
  1592. padding: 0 !important;
  1593. font-size: 12px;
  1594. line-height: 40px;
  1595. }
  1596. .all_choose {
  1597. /* margin: 15px 0 10px; */
  1598. /* height: 20%; */
  1599. display: flex;
  1600. flex-direction: row;
  1601. align-items: center;
  1602. max-width: 180px;
  1603. width: 180px;
  1604. }
  1605. .all_choose>span {
  1606. min-width: 50px;
  1607. display: block;
  1608. margin-right: 10px;
  1609. text-align-last: justify;
  1610. }
  1611. .choose {
  1612. display: flex;
  1613. flex-direction: row;
  1614. flex-wrap: wrap;
  1615. align-content: space-between;
  1616. height: 100%;
  1617. justify-content: flex-start;
  1618. /* width: 60%; */
  1619. /* min-width: 868px; */
  1620. align-items: center;
  1621. }
  1622. .choose>div {
  1623. /* margin-left: 10px; */
  1624. width: 180px;
  1625. /* margin-top: 15px; */
  1626. }
  1627. .choose>div+div {
  1628. margin-left: 10px;
  1629. }
  1630. .choose>.clear {
  1631. width: 70px
  1632. }
  1633. .clear {
  1634. width: 70px;
  1635. max-width: 70px;
  1636. height: 35px;
  1637. background: #3681fc;
  1638. color: #fff;
  1639. text-align: center;
  1640. border-radius: 5px;
  1641. line-height: 35px;
  1642. cursor: pointer;
  1643. margin-left: 20px;
  1644. }
  1645. .ct_box {
  1646. height: 500px;
  1647. overflow: auto;
  1648. display: flex;
  1649. flex-wrap: wrap;
  1650. }
  1651. .myCourse {
  1652. position: absolute;
  1653. background: #3c3c3c;
  1654. width: 65px;
  1655. height: 25px;
  1656. color: #fff;
  1657. font-size: 12px;
  1658. text-align: center;
  1659. line-height: 25px;
  1660. top: 0;
  1661. right: 0;
  1662. }
  1663. .xtCourse {
  1664. position: absolute;
  1665. background: #3681fc;
  1666. width: 70px;
  1667. height: 30px;
  1668. border-radius: 30px;
  1669. color: #fff;
  1670. font-size: 14px;
  1671. text-align: center;
  1672. line-height: 30px;
  1673. top: 5px;
  1674. left: 5px;
  1675. }
  1676. .subClick {
  1677. font-size: 16px;
  1678. cursor: pointer;
  1679. margin-left: 10px;
  1680. /* color: #ab582f; */
  1681. color: #409eff;
  1682. }
  1683. .more {
  1684. position: relative;
  1685. }
  1686. .more:hover div {
  1687. display: block;
  1688. color: #000;
  1689. }
  1690. .more div {
  1691. position: absolute;
  1692. bottom: 0px;
  1693. transform: translate(-50%, 100%);
  1694. background: #f5f4f4;
  1695. padding: 10px 20px;
  1696. z-index: 99;
  1697. width: 40px;
  1698. border-radius: 5px;
  1699. box-shadow: 0 0 3px 3px #80808020;
  1700. display: none;
  1701. }
  1702. .more div>span+span {
  1703. margin-top: 10px;
  1704. }
  1705. .more div>span {
  1706. display: block;
  1707. width: 100%;
  1708. text-align: center;
  1709. }
  1710. .more div>span:hover {
  1711. color: #79a2ff;
  1712. }
  1713. .test_box {
  1714. width: calc(100% / 5 - (15px * 4) / 5);
  1715. /* width: 250px; */
  1716. background: #fff;
  1717. border-radius: 5px;
  1718. padding: 20px;
  1719. margin: 5px 15px 10px 0;
  1720. box-sizing: border-box;
  1721. border: 1px solid #e7e7e7;
  1722. }
  1723. .test_box:nth-child(5n) {
  1724. margin-right: 0;
  1725. }
  1726. .test_top {
  1727. width: 100%;
  1728. display: flex;
  1729. align-items: center;
  1730. }
  1731. .test_top>.test_top_img {
  1732. height: 40px;
  1733. width: 40px;
  1734. background: rgb(108 150 217);
  1735. margin-right: 10px;
  1736. border-radius: 5px;
  1737. display: flex;
  1738. align-items: center;
  1739. justify-content: center;
  1740. }
  1741. .test_top>.gr {
  1742. background: rgb(142, 189, 176);
  1743. }
  1744. .test_top>.md {
  1745. background: rgb(139, 174, 227);
  1746. }
  1747. .test_top>.js {
  1748. background: rgb(64, 149, 174);
  1749. }
  1750. .test_top>.yy {
  1751. background: rgb(98, 102, 188);
  1752. }
  1753. .test_top>.bj {
  1754. background: rgb(98, 158, 188);
  1755. }
  1756. .test_top>.test_top_img:after {
  1757. content: '';
  1758. display: block;
  1759. width: 23px;
  1760. height: 23px;
  1761. background-size: 100% 100%;
  1762. background-image: url('../../../assets/icon/test/all_icon_b.png');
  1763. }
  1764. .test_top>.gr:after {
  1765. background-image: url('../../../assets/icon/test/gr_icon_b.png');
  1766. }
  1767. .test_top>.md:after {
  1768. background-image: url('../../../assets/icon/test/md_icon_b.png');
  1769. }
  1770. .test_top>.js:after {
  1771. background-image: url('../../../assets/icon/test/js_icon_b.png');
  1772. }
  1773. .test_top>.yy:after {
  1774. background-image: url('../../../assets/icon/test/yy_icon_b.png');
  1775. }
  1776. .test_top>.bj:after {
  1777. background-image: url('../../../assets/icon/test/bj_icon_b.png');
  1778. }
  1779. .test_top>.test_top_title {
  1780. display: flex;
  1781. flex-direction: column;
  1782. justify-content: space-between;
  1783. height: 40px;
  1784. width: calc(100% - 40px - 10px)
  1785. }
  1786. .test_top>.test_top_title>span {
  1787. width: 100;
  1788. display: block;
  1789. word-break: break-all;
  1790. overflow: hidden;
  1791. text-overflow: ellipsis;
  1792. white-space: nowrap;
  1793. }
  1794. .test_top>.test_top_title>span:nth-child(1) {
  1795. font-size: 15px;
  1796. }
  1797. .test_top>.test_top_title>span:nth-child(2) {
  1798. font-size: 14px;
  1799. color: rgb(58, 131, 252);
  1800. }
  1801. .test_box>.test_time {
  1802. margin-top: 10px;
  1803. font-size: 14px;
  1804. color: #a7a7a7;
  1805. display: flex;
  1806. }
  1807. .test_box>.test_time>span:nth-child(1) {
  1808. width: 85px;
  1809. display: flex;
  1810. }
  1811. .test_box>.test_time>span:nth-child(1)>span {
  1812. width: 100%;
  1813. text-align-last: justify;
  1814. }
  1815. .test_box>.test_time>span:nth-child(1)::after {
  1816. content: ':';
  1817. }
  1818. .test_box>.test_time>span:nth-child(2) {
  1819. max-width: calc(100% - 70px);
  1820. overflow: hidden;
  1821. display: block;
  1822. text-overflow: ellipsis;
  1823. white-space: nowrap;
  1824. word-break: break-all;
  1825. }
  1826. .test_box>.test_btn {
  1827. margin-top: 10px;
  1828. display: flex;
  1829. align-items: center;
  1830. justify-content: space-between;
  1831. }
  1832. .test_box>.test_btn>.test_o_btn {
  1833. display: flex;
  1834. align-items: center;
  1835. }
  1836. .test_box>.test_btn>.test_o_btn>span {
  1837. display: block;
  1838. width: 18px;
  1839. height: 18px;
  1840. background-size: 100% 100%;
  1841. cursor: pointer;
  1842. }
  1843. .test_box>.test_btn>.test_o_btn>.edit {
  1844. background-image: url('../../../assets/icon/test/edit_test_icon.png');
  1845. margin-right: 20px;
  1846. }
  1847. .test_box>.test_btn>.test_o_btn>.check {
  1848. background-image: url('../../../assets/icon/test/check_test_icon.png');
  1849. margin-right: 20px;
  1850. }
  1851. .test_box>.test_btn>.test_o_btn>.copy {
  1852. background-image: url('../../../assets/icon/test/paste-icon.png');
  1853. margin-right: 20px;
  1854. }
  1855. .test_box>.test_btn>.test_o_btn>.share {
  1856. background-image: url('../../../assets/icon/test/share_test_icon.png');
  1857. margin-right: 20px;
  1858. }
  1859. .test_box>.test_btn>.test_o_btn>.delete {
  1860. background-image: url('../../../assets/icon/test/delete_test_icon.png');
  1861. }
  1862. .test_type {
  1863. font-size: 12px;
  1864. border-radius: 5px;
  1865. border: 1.5px solid;
  1866. padding: 3px 8px;
  1867. }
  1868. .is {
  1869. color: rgb(57, 204, 127);
  1870. background-color: rgba(57, 204, 127, .1);
  1871. }
  1872. .no {
  1873. color: rgb(235, 154, 96);
  1874. background-color: rgba(235, 154, 96, .1);
  1875. }
  1876. .noTime {
  1877. color: rgb(77, 77, 77);
  1878. background-color: rgba(77, 77, 77, .1);
  1879. }
  1880. .doing {
  1881. color: rgb(54, 116, 231);
  1882. background-color: rgba(54, 116, 231, .1);
  1883. }
  1884. .nodo {
  1885. color: rgb(97, 184, 255);
  1886. background-color: rgba(97, 184, 255, .1);
  1887. }
  1888. .test_type2 {
  1889. font-size: 14px;
  1890. border-radius: 5px;
  1891. /* border: 1.5px solid; */
  1892. padding: 3px 8px;
  1893. }
  1894. .sub_head {
  1895. position: relative;
  1896. font-size: 20px;
  1897. font-weight: bold;
  1898. padding: 0 15px;
  1899. }
  1900. .sub_head::after {
  1901. content: "";
  1902. width: 100%;
  1903. background: #3681FC;
  1904. height: 2px;
  1905. position: absolute;
  1906. left: 0;
  1907. bottom: -8px;
  1908. }
  1909. .subClick {
  1910. /* font-size: 16px; */
  1911. font-size: 20px;
  1912. cursor: pointer;
  1913. /* margin-left: 17.5px; */
  1914. /* color: #ab582f; */
  1915. /* color: #409eff; */
  1916. color: #999;
  1917. padding: 0 15px;
  1918. }
  1919. .subClick:hover {
  1920. color: #000;
  1921. }
  1922. .sub_head+.subClick,
  1923. .subClick+.subClick,
  1924. .subClick+.sub_head {
  1925. margin-left: 17.5px;
  1926. }
  1927. .bbox_nav {
  1928. width: 100%;
  1929. display: flex;
  1930. align-items: center;
  1931. margin-top: 10px;
  1932. }
  1933. .bbox_nav>span {
  1934. height: 40px;
  1935. line-height: 40px;
  1936. text-align: center;
  1937. background: #e0eafb;
  1938. font-size: 18px;
  1939. color: #41506D;
  1940. padding: 0 35px;
  1941. border-radius: 5px 5px 0 0;
  1942. }
  1943. .bbox_nav>.active {
  1944. background: #3681fc;
  1945. color: #fff;
  1946. }
  1947. .bbox {
  1948. background: #fff;
  1949. border-radius: 0 5px 5px 5px;
  1950. padding: 15px 0;
  1951. box-sizing: border-box;
  1952. }
  1953. .search_nav {
  1954. border-bottom: 1px solid #E7E7E7;
  1955. width: 100%;
  1956. box-sizing: border-box;
  1957. padding: 0 15px;
  1958. display: flex;
  1959. align-items: center;
  1960. }
  1961. .search_nav>.right {
  1962. display: flex;
  1963. align-items: center;
  1964. }
  1965. .search_nav>.right>span {
  1966. height: 30px;
  1967. font-size: 14px;
  1968. color: #000;
  1969. cursor: pointer;
  1970. position: relative;
  1971. }
  1972. .search_nav>.right>span+span {
  1973. margin-left: 35px;
  1974. }
  1975. .search_nav>.right>span.active {
  1976. color: #3681FC;
  1977. font-weight: 600;
  1978. }
  1979. .search_nav>.right>span.active::before {
  1980. content: "";
  1981. position: absolute;
  1982. bottom: 0;
  1983. width: 15px;
  1984. height: 3px;
  1985. background: #3681fc;
  1986. left: 50%;
  1987. transform: translateX(-50%);
  1988. }
  1989. .search_nav>.left {
  1990. display: flex;
  1991. align-items: center;
  1992. margin-left: auto;
  1993. }
  1994. .search_nav>.left>span {
  1995. height: 25px;
  1996. width: 25px;
  1997. display: flex;
  1998. align-items: center;
  1999. justify-content: center;
  2000. border-radius: 5px;
  2001. cursor: pointer;
  2002. }
  2003. .search_nav>.left>span+span {
  2004. margin-left: 10px;
  2005. }
  2006. .search_nav>.left>span.active {
  2007. background: #E0EAFB;
  2008. }
  2009. .search_nav>.left>span::before {
  2010. content: "";
  2011. width: 12px;
  2012. height: 12px;
  2013. background-size: 100% 100%;
  2014. }
  2015. .search_nav>.left>span.list::before {
  2016. background-image: url("../../../assets/icon/test/test_list.png");
  2017. }
  2018. .search_nav>.left>span.table::before {
  2019. background-image: url("../../../assets/icon/test/test_table.png");
  2020. }
  2021. .search_nav>.left>span.table.active::before {
  2022. background-image: url("../../../assets/icon/test/test_table_active.png");
  2023. }
  2024. .search_nav>.left>span.list.active::before {
  2025. background-image: url("../../../assets/icon/test/test_list_active.png");
  2026. }
  2027. .serach_icon {
  2028. position: absolute;
  2029. right: 12px;
  2030. top: 50%;
  2031. transform: translateY(-50%);
  2032. width: 13px;
  2033. height: 13px;
  2034. background: url("../../../assets/icon/test/test_search.png") no-repeat;
  2035. background-size: 100% 100%;
  2036. cursor: pointer;
  2037. }
  2038. .student_input>>>.el-input__inner {
  2039. padding-right: 35px;
  2040. }
  2041. .test_data_box {
  2042. display: flex;
  2043. width: calc(100% - 20px);
  2044. margin: 0 auto 15px;
  2045. flex-wrap: wrap;
  2046. }
  2047. .test_data_box>.data_box {
  2048. width: calc(100% / 4 - (45px / 4));
  2049. height: 150px;
  2050. border: 1px solid #e7e7e7;
  2051. border-radius: 5px;
  2052. box-sizing: border-box;
  2053. padding: 10px;
  2054. display: flex;
  2055. align-items: center;
  2056. }
  2057. .test_data_box>.data_box+.data_box {
  2058. margin-left: 15px;
  2059. }
  2060. .test_data_box>.data_box>.left {
  2061. /* width: 110px; */
  2062. min-width: fit-content;
  2063. height: 100%;
  2064. }
  2065. .test_data_box>.data_box>.left>.title {
  2066. font-size: 16px;
  2067. color: #00000099;
  2068. margin-bottom: 10px;
  2069. }
  2070. .test_data_box>.data_box>.left>.box {
  2071. display: flex;
  2072. flex-direction: column;
  2073. font-size: 14px;
  2074. height: calc(100% - 30px);
  2075. justify-content: space-between;
  2076. }
  2077. .test_data_box>.data_box>.left>.box2 {
  2078. display: flex;
  2079. flex-direction: column;
  2080. font-size: 30px;
  2081. font-weight: 600;
  2082. height: calc(100% - 60px);
  2083. /* align-items:center; */
  2084. justify-content: center;
  2085. }
  2086. .test_data_box>.data_box>.left>.box>span {
  2087. display: flex;
  2088. align-items: center;
  2089. }
  2090. .test_data_box>.data_box>.left>.box>span::before {
  2091. content: '';
  2092. width: 10px;
  2093. height: 10px;
  2094. border-radius: 50%;
  2095. /* background: #000; */
  2096. margin-right: 5px;
  2097. }
  2098. .test_data_box>.data_box>.left>.box>.color1::before {
  2099. background: #3673e8;
  2100. }
  2101. .test_data_box>.data_box>.left>.box>.color2::before {
  2102. background: #61b8ff;
  2103. }
  2104. .test_data_box>.data_box>.left>.box>.color3::before {
  2105. background: #96d8a8;
  2106. }
  2107. .test_data_box>.data_box>.left>.box>.color4::before {
  2108. background: #f5b763;
  2109. }
  2110. .test_data_box>.data_box>.left>.box>.color5::before {
  2111. background: #b362ff;
  2112. }
  2113. .test_data_box>.data_box>.right {
  2114. /* width: calc(100% - 110px); */
  2115. width: calc(100%);
  2116. height: 100%;
  2117. }
  2118. .el-table>>>.rowClass>td {
  2119. padding: 7px 0;
  2120. }
  2121. .tableClass {
  2122. width: calc(100% - 20px);
  2123. margin: 0 auto;
  2124. }
  2125. </style>