index.vue 81 KB

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