class.vue 42 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696
  1. <template>
  2. <div class="pb_content" style="background: unset">
  3. <div
  4. v-if="ctype == 1"
  5. class="pb_content_body"
  6. style="
  7. background: #fff;
  8. padding: 0px 25px;
  9. box-sizing: border-box;
  10. border-radius: 5px;
  11. "
  12. >
  13. <div class="pb_head top">
  14. <div style="display: flex; align-items: center">
  15. <span
  16. class="subClick"
  17. @click="
  18. goTo(
  19. '/student?userid=' +
  20. userid +
  21. '&oid=' +
  22. oid +
  23. '&org=' +
  24. org +
  25. '&role=' +
  26. role
  27. )
  28. "
  29. >学生管理</span
  30. >
  31. <span class="sub_head">班级管理</span>
  32. <span
  33. class="subClick"
  34. @click="
  35. goTo(
  36. '/grade?userid=' +
  37. userid +
  38. '&oid=' +
  39. oid +
  40. '&org=' +
  41. org +
  42. '&role=' +
  43. role
  44. )
  45. "
  46. >年级管理</span
  47. >
  48. </div>
  49. <div style="border-radius: 4px">
  50. <el-button
  51. type="primary"
  52. class="bgColor student_button"
  53. @click="dialogVisible = true"
  54. >添加班级</el-button
  55. >
  56. </div>
  57. </div>
  58. <div class="student_head">
  59. <div class="student_search">
  60. <span>
  61. <el-input
  62. placeholder="请输入班级名称"
  63. v-model="sClassName"
  64. clearable
  65. class="student_input"
  66. >
  67. </el-input>
  68. </span>
  69. <el-button type="primary" @click="searchClass" class="student_button"
  70. >查询</el-button
  71. >
  72. </div>
  73. </div>
  74. </div>
  75. <div class="pb_content_body" v-if="ctype == 1">
  76. <div class="student_table">
  77. <el-table
  78. v-if="ctype == 1"
  79. ref="table"
  80. :key="1"
  81. :data="tableData"
  82. border
  83. :height="tableHeight"
  84. :fit="true"
  85. v-loading="isLoading"
  86. style="width: 100%; height: 60%"
  87. :header-cell-style="{ background: '#f1f1f1' }"
  88. :row-class-name="tableRowClassName"
  89. >
  90. <el-table-column prop="name" label="班级名称" align="center">
  91. </el-table-column>
  92. <el-table-column label="所属年级" align="center">
  93. <template slot-scope="{ row }">
  94. {{ getGrade(row.pid) }}
  95. </template>
  96. </el-table-column>
  97. <el-table-column prop="pnum" label="人数" align="center">
  98. </el-table-column>
  99. <el-table-column label="操作" width="600px">
  100. <template slot-scope="scope">
  101. <div class="classButtonBox">
  102. <el-button
  103. type="primary"
  104. size="small"
  105. @click="getStudent(scope.row.id)"
  106. >查看学生</el-button
  107. >
  108. <el-button
  109. type="primary"
  110. size="small"
  111. @click="updateG(scope.row.pid, scope.row.id)"
  112. >修改年级</el-button
  113. >
  114. <el-button
  115. type="primary"
  116. size="small"
  117. @click="openUpdate(scope.row.id, scope.row.name)"
  118. >修改名称</el-button
  119. >
  120. <el-button
  121. class="de_button"
  122. type="primary"
  123. size="small"
  124. @click="
  125. goTo(
  126. '/studentEva?userid=' +
  127. userid +
  128. '&oid=' +
  129. oid +
  130. '&org=' +
  131. org +
  132. '&cid=' +
  133. scope.row.id +
  134. '&role=' +
  135. role
  136. )
  137. "
  138. >查看评价</el-button
  139. >
  140. <el-button
  141. type="primary"
  142. size="small"
  143. @click="deleteClass(scope.row.id)"
  144. >删除</el-button
  145. >
  146. </div>
  147. </template>
  148. </el-table-column>
  149. </el-table>
  150. </div>
  151. <div class="student_page">
  152. <el-pagination
  153. background
  154. layout="prev, pager, next"
  155. :page-size="10"
  156. :total="total"
  157. v-if="page"
  158. @current-change="handleCurrentChange"
  159. >
  160. </el-pagination>
  161. </div>
  162. </div>
  163. <div
  164. v-if="ctype == 2"
  165. class="pb_content_body"
  166. style="
  167. background: #fff;
  168. padding: 0px 25px;
  169. box-sizing: border-box;
  170. border-radius: 5px;
  171. "
  172. >
  173. <div class="pb_head top">
  174. <span>查看学生</span>
  175. <div style="border-radius: 4px">
  176. <el-button
  177. type="primary"
  178. class="bgColor student_button"
  179. @click="(ctype = 1), getClass()"
  180. >返回</el-button
  181. >
  182. </div>
  183. </div>
  184. <div class="student_head">
  185. <div class="head_left">
  186. <el-input
  187. v-model="sPhoneUser"
  188. class="student_input"
  189. placeholder="请输入用户名"
  190. ></el-input>
  191. <el-select
  192. disabled
  193. v-model="cid"
  194. placeholder="请选择班级"
  195. class="student_input"
  196. @change="searchStudent"
  197. >
  198. <el-option label="所有人" value=""></el-option>
  199. <el-option
  200. v-for="(item, index) in classJuri"
  201. :key="index"
  202. :label="item.name"
  203. :value="item.id"
  204. ></el-option>
  205. </el-select>
  206. <el-button
  207. type="primary"
  208. class="student_button"
  209. @click="searchStudent"
  210. >查询</el-button
  211. >
  212. </div>
  213. <div class="head_right">
  214. <el-button @click="addStudent" class="student_button"
  215. >添加学生</el-button
  216. >
  217. </div>
  218. </div>
  219. </div>
  220. <div class="pb_content_body" v-if="ctype == 2">
  221. <div class="student_table">
  222. <el-table
  223. v-if="ctype == 2"
  224. :key="2"
  225. ref="table2"
  226. :data="tableData2"
  227. border
  228. :height="tableHeight"
  229. :fit="true"
  230. v-loading="isLoading"
  231. style="width: 100%"
  232. :header-cell-style="{ background: '#f1f1f1', fontSize: '17px' }"
  233. :row-class-name="tableRowClassName"
  234. >
  235. <el-table-column label="姓名" min-width="10" align="center">
  236. <template slot-scope="scope">
  237. <div class="userImg">
  238. <div class="tx">
  239. <img
  240. :src="
  241. scope.row.headportrait != null
  242. ? scope.row.headportrait
  243. : tx
  244. "
  245. alt
  246. />
  247. </div>
  248. <div
  249. style="
  250. width: 150px;
  251. text-align: left;
  252. white-space: nowrap;
  253. overflow: hidden;
  254. text-overflow: ellipsis;
  255. "
  256. >
  257. {{ scope.row.name }}
  258. </div>
  259. </div>
  260. </template>
  261. </el-table-column>
  262. <el-table-column label="学生账号" min-width="15" align="center">
  263. <template slot-scope="scope">
  264. <div>{{ scope.row.un ? scope.row.un : "" }}</div>
  265. </template>
  266. </el-table-column>
  267. <el-table-column
  268. prop="classname2"
  269. label="班级"
  270. min-width="15"
  271. align="center"
  272. >
  273. </el-table-column>
  274. <el-table-column label="操作" width="250px">
  275. <template slot-scope="scope">
  276. <div class="btnBox">
  277. <el-button
  278. class="de_button"
  279. type="primary"
  280. size="small"
  281. @click="iniPassword(scope.row.userid)"
  282. >初始化密码</el-button
  283. >
  284. <el-button
  285. class="de_button"
  286. type="primary"
  287. size="small"
  288. @click="updateStudentA(scope.row)"
  289. >修改</el-button
  290. >
  291. <el-button
  292. class="de_button"
  293. type="primary"
  294. size="small"
  295. @click="deleteClassStudent(scope.row.userid)"
  296. >移除</el-button
  297. >
  298. <!-- <div class="delete">
  299. <img src="../../assets/remove.png" alt @click="deleteStudent(scope.row.userid, scope.row.state)" />
  300. </div> -->
  301. </div>
  302. </template>
  303. </el-table-column>
  304. </el-table>
  305. </div>
  306. <div class="student_page">
  307. <el-pagination
  308. background
  309. layout="prev, pager, next"
  310. :page-size="10"
  311. :total="total2"
  312. v-if="page2"
  313. @current-change="handleCurrentChange2"
  314. ></el-pagination>
  315. </div>
  316. </div>
  317. <el-dialog
  318. :visible.sync="dialogVisibleAddStudent"
  319. :append-to-body="true"
  320. width="700px"
  321. :before-close="handleClose"
  322. class="add_student"
  323. >
  324. <div slot="title" class="header-title">
  325. <div class="logoImg">
  326. <img src="../../assets/logo.png" alt />
  327. </div>
  328. <div class="title_add_student">添加学生</div>
  329. </div>
  330. <el-form>
  331. <el-form-item label="学生姓名" :label-width="formLabelWidth">
  332. <span>
  333. <el-input
  334. placeholder="请输入学生姓名"
  335. clearable
  336. v-model="sName"
  337. class="add_input"
  338. ></el-input>
  339. </span>
  340. </el-form-item>
  341. <el-form-item label="学生学号" :label-width="formLabelWidth">
  342. <span>
  343. <el-input
  344. placeholder="请输入学生学号"
  345. clearable
  346. v-model="sId"
  347. class="add_input"
  348. ></el-input>
  349. </span>
  350. </el-form-item>
  351. <el-form-item label="学生手机号" :label-width="formLabelWidth">
  352. <span>
  353. <el-input
  354. placeholder="请输入学生手机号"
  355. clearable
  356. v-model="sPhone"
  357. class="add_input"
  358. ></el-input>
  359. </span>
  360. </el-form-item>
  361. <el-form-item label="学生账号" :label-width="formLabelWidth">
  362. <span>
  363. <el-input
  364. placeholder="请输入学生账号"
  365. clearable
  366. v-model="sMail"
  367. class="add_input"
  368. ></el-input>
  369. </span>
  370. </el-form-item>
  371. <el-form-item label="所属学校" :label-width="formLabelWidth">
  372. <el-input
  373. disabled
  374. style="width: 300px"
  375. v-model="schoolName"
  376. ></el-input>
  377. </el-form-item>
  378. <el-form-item label="班级" :label-width="formLabelWidth">
  379. <el-select v-model="cid" placeholder="请选择班级" disabled>
  380. <el-option
  381. v-for="(item, index) in classJuri"
  382. :key="index"
  383. :label="item.name"
  384. :value="item.id"
  385. ></el-option>
  386. </el-select>
  387. </el-form-item>
  388. <div style="text-align: center; color: #adb3b7">
  389. 注:添加学生的账号密码为Coco1234
  390. </div>
  391. </el-form>
  392. <span slot="footer" class="dialog-footer flex">
  393. <el-button class="right" @click="insertStudent">确认</el-button>
  394. </span>
  395. </el-dialog>
  396. <el-dialog
  397. :visible.sync="dialogVisibleUpdate"
  398. :append-to-body="true"
  399. width="700px"
  400. :before-close="handleClose"
  401. class="add_student"
  402. >
  403. <div slot="title" class="header-title">
  404. <div class="logoImg">
  405. <img src="../../assets/logo.png" alt />
  406. </div>
  407. <div class="title_add_student">修改学生</div>
  408. </div>
  409. <el-form>
  410. <el-form-item label="学生名称" :label-width="formLabelWidth">
  411. <span>
  412. <el-input
  413. placeholder="请输入学生姓名"
  414. clearable
  415. v-model="userinfo.name"
  416. class="add_input"
  417. ></el-input>
  418. </span>
  419. </el-form-item>
  420. <el-form-item label="学生学号" :label-width="formLabelWidth">
  421. <span>
  422. <el-input
  423. placeholder="请输入学生学号"
  424. clearable
  425. v-model="userinfo.studentid"
  426. class="add_input"
  427. ></el-input>
  428. </span>
  429. </el-form-item>
  430. <el-form-item label="学生手机号" :label-width="formLabelWidth">
  431. <span>
  432. <el-input
  433. placeholder="请输入学生手机号"
  434. clearable
  435. v-model="userinfo.phonenumber"
  436. class="add_input"
  437. ></el-input>
  438. </span>
  439. </el-form-item>
  440. <el-form-item label="学生账号" :label-width="formLabelWidth">
  441. <span>
  442. <el-input
  443. placeholder="请输入学生账号"
  444. clearable
  445. v-model="userinfo.un"
  446. class="add_input"
  447. ></el-input>
  448. </span>
  449. </el-form-item>
  450. <el-form-item label="所属学校" :label-width="formLabelWidth">
  451. <el-input
  452. disabled
  453. style="width: 300px"
  454. v-model="schoolName"
  455. ></el-input>
  456. </el-form-item>
  457. <el-form-item label="班级" :label-width="formLabelWidth">
  458. <el-select
  459. multiple
  460. collapse-tags
  461. v-model="userinfo.classid"
  462. placeholder="请选择班级"
  463. >
  464. <el-option
  465. v-for="(item, index) in classJuri"
  466. :key="index"
  467. :label="item.name"
  468. :value="item.id"
  469. ></el-option>
  470. </el-select>
  471. </el-form-item>
  472. <div style="text-align: center; color: #adb3b7">
  473. 注:添加学生的账号密码为Coco1234
  474. </div>
  475. </el-form>
  476. <span slot="footer" class="dialog-footer flex">
  477. <el-button class="right" @click="updateStudent">修改</el-button>
  478. </span>
  479. </el-dialog>
  480. <el-dialog
  481. title="添加班级"
  482. :visible.sync="dialogVisible"
  483. :append-to-body="true"
  484. width="25%"
  485. :before-close="handleClose"
  486. class="dialog_diy"
  487. >
  488. <el-form>
  489. <el-form-item label="班级名称" :label-width="formLabelWidth">
  490. <el-input
  491. v-model="className"
  492. auto-complete="off"
  493. placeholder="请输入班级..."
  494. ></el-input>
  495. </el-form-item>
  496. </el-form>
  497. <span slot="footer" class="dialog-footer">
  498. <el-button @click="dialogVisible = false">取 消</el-button>
  499. <el-button type="primary" @click="insertClass">确 定</el-button>
  500. </span>
  501. </el-dialog>
  502. <el-dialog
  503. title="修改年级"
  504. :visible.sync="dialogVisibleGrade"
  505. :append-to-body="true"
  506. width="25%"
  507. :before-close="handleClose"
  508. class="dialog_diy"
  509. >
  510. <el-form>
  511. <el-form-item label="选择年级" :label-width="formLabelWidth">
  512. <el-select
  513. v-model="gid"
  514. placeholder="请选择班级"
  515. class="student_input"
  516. clearable
  517. >
  518. <el-option
  519. v-for="(item, index) in grade"
  520. :key="index"
  521. :label="item.name"
  522. :value="item.id"
  523. ></el-option>
  524. </el-select>
  525. </el-form-item>
  526. </el-form>
  527. <span slot="footer" class="dialog-footer">
  528. <el-button @click="dialogVisibleGrade = false">取 消</el-button>
  529. <el-button type="primary" @click="updateGrade">确 定</el-button>
  530. </span>
  531. </el-dialog>
  532. <el-dialog
  533. title="修改班级"
  534. :visible.sync="dialogVisible1"
  535. :append-to-body="true"
  536. width="25%"
  537. :before-close="handleClose"
  538. class="dialog_diy"
  539. >
  540. <el-form>
  541. <el-form-item label="班级名称" :label-width="formLabelWidth">
  542. <el-input
  543. v-model="className1"
  544. auto-complete="off"
  545. placeholder="请输入班级..."
  546. ></el-input>
  547. </el-form-item>
  548. </el-form>
  549. <span slot="footer" class="dialog-footer">
  550. <el-button @click="dialogVisible1 = false">取 消</el-button>
  551. <el-button type="primary" @click="updateClass">确 定</el-button>
  552. </span>
  553. </el-dialog>
  554. <el-dialog
  555. title="添加学生"
  556. :visible.sync="dialogVisibleMember"
  557. :append-to-body="true"
  558. width="500px"
  559. height="80%"
  560. :before-close="handleClose"
  561. class="addNewPP"
  562. >
  563. <div class="people">
  564. <div class="people_top">
  565. <div class="people_top_right">
  566. <div class="people_search">
  567. <el-input
  568. placeholder="搜索学生姓名"
  569. v-model="searchTN"
  570. @keyup.enter.native="getClassStudent"
  571. ></el-input>
  572. <div class="search_img" @click="getClassStudent">
  573. <img src="../../assets/icon/search.png" alt />
  574. </div>
  575. </div>
  576. </div>
  577. <div class="people_nav">选择成员</div>
  578. </div>
  579. <div
  580. class="t_j_box"
  581. style="
  582. padding: 20px 0 0 25px;
  583. width: calc(100% - 55px);
  584. margin-left: 25px;
  585. "
  586. >
  587. <span>姓名</span>
  588. <span>账号</span>
  589. </div>
  590. <el-checkbox-group
  591. v-model="checkboxList3"
  592. class="people_name"
  593. v-if="teacherJuri.length"
  594. v-loading="isLoading2"
  595. >
  596. <el-checkbox
  597. v-for="item in teacherJuri"
  598. :key="item.userid"
  599. :label="item.userid"
  600. >
  601. <div class="t_j_box">
  602. <el-tooltip
  603. placement="top"
  604. :content="item.name ? item.name : '暂无姓名'"
  605. >
  606. <span>{{ item.name ? item.name : "暂无姓名" }}</span>
  607. </el-tooltip>
  608. <el-tooltip placement="top" :content="item.username">
  609. <span>{{ item.username }}</span>
  610. </el-tooltip>
  611. </div>
  612. </el-checkbox>
  613. </el-checkbox-group>
  614. <div style="text-align: center; margin-top: 10px" v-else>暂无数据</div>
  615. </div>
  616. <div style="margin-top: 10px">
  617. <el-pagination
  618. background
  619. layout="prev, pager, next"
  620. :page-size="pageSize3"
  621. :total="total3"
  622. v-if="page3 && teacherJuri.length"
  623. style="padding-bottom: 20px"
  624. @current-change="handleCurrentChange3"
  625. ></el-pagination>
  626. </div>
  627. <span slot="footer" class="dialog-footer">
  628. <el-button @click="dialogVisibleMember = false">取 消</el-button>
  629. <el-button type="primary" @click="addClassStudent">确定</el-button>
  630. </span>
  631. </el-dialog>
  632. </div>
  633. </template>
  634. <script>
  635. import TaskListHeader from "gantt-elastic/src/components/TaskList/TaskListHeader.vue";
  636. export default {
  637. data() {
  638. return {
  639. tableHeight: "500px",
  640. isLoading: false,
  641. formLabelWidth: "100px",
  642. sClassName: "",
  643. className: "",
  644. className1: "",
  645. classid: "",
  646. dialogVisible: false,
  647. dialogVisible1: false,
  648. dialogVisibleUpdate: false,
  649. dialogVisibleAddStudent: false,
  650. tableData: [],
  651. page: 1,
  652. total: 0,
  653. tableData2: [],
  654. page2: 1,
  655. total2: 0,
  656. userid: this.$route.query.userid,
  657. org: this.$route.query.org,
  658. oid: this.$route.query.oid,
  659. role: this.$route.query.role,
  660. cid: "",
  661. ctype: 1,
  662. sName: "",
  663. sPhone: "",
  664. sId: "",
  665. schoolName: "",
  666. sByClass: "",
  667. sMail: "",
  668. classJuri: [],
  669. userinfo: {},
  670. userinfoA: {},
  671. sPhoneUser: "",
  672. tx: require("../../assets/avatar.png"),
  673. dialogVisibleMember: false,
  674. checkboxList3: [],
  675. teacherJuri: [],
  676. pageSize3: 10,
  677. total3: 0,
  678. page3: 1,
  679. isLoading2: false,
  680. searchTN: "",
  681. grade: [],
  682. gid: "",
  683. dialogVisibleGrade: false,
  684. };
  685. },
  686. created() {
  687. this.page = 1;
  688. this.getClass();
  689. this.getClass2();
  690. this.selectGrage();
  691. this.getSchoolName();
  692. },
  693. computed: {
  694. getGrade() {
  695. return function (gid) {
  696. let name = "";
  697. this.grade.forEach((element) => {
  698. if (element.id == gid) {
  699. name = element.name;
  700. }
  701. });
  702. return name ? name : "暂无";
  703. };
  704. },
  705. },
  706. mounted() {
  707. this.$nextTick(function () {
  708. this.tableHeight =
  709. window.innerHeight - this.$refs.table.$el.offsetTop - 200;
  710. if (this.tableHeight <= 530) {
  711. this.tableHeight = 530;
  712. }
  713. // 监听窗口大小变化
  714. let self = this;
  715. window.onresize = function () {
  716. self.tableHeight =
  717. window.innerHeight - self.$refs.table.$el.offsetTop - 200;
  718. if (self.tableHeight <= 530) {
  719. self.tableHeight = 530;
  720. }
  721. };
  722. });
  723. },
  724. methods: {
  725. goTo(path) {
  726. this.$router.push(path);
  727. },
  728. //获取班级列表
  729. selectGrage() {
  730. let params = {
  731. oid: this.oid,
  732. };
  733. this.ajax
  734. .get(this.$store.state.api + "selectGrageBySchool", params)
  735. .then((res) => {
  736. this.grade = res.data[0];
  737. })
  738. .catch((err) => {
  739. console.error(err);
  740. });
  741. },
  742. tableRowClassName({ row, rowIndex }) {
  743. if ((rowIndex + 1) % 2 === 0) {
  744. return "even_row";
  745. } else {
  746. return "";
  747. }
  748. },
  749. handleCurrentChange(val) {
  750. this.page = val;
  751. this.getClass();
  752. },
  753. handleClose(done) {
  754. done();
  755. },
  756. time() {
  757. if (!this.now) {
  758. this.now = new Date().getTime();
  759. return true;
  760. } else {
  761. let time = new Date().getTime();
  762. if (time - this.now > 3000) {
  763. this.now = time;
  764. return true;
  765. } else {
  766. return false;
  767. }
  768. }
  769. },
  770. searchClass() {
  771. this.page = 1;
  772. this.getClass();
  773. },
  774. updateG(gid, id) {
  775. this.gid = gid;
  776. this.classid = id;
  777. this.dialogVisibleGrade = true;
  778. },
  779. updateGrade() {
  780. this.$confirm("确定修改吗?", "提示", {
  781. confirmButtonText: "确定",
  782. cancelButtonText: "取消",
  783. type: "warning",
  784. })
  785. .then(() => {
  786. let params = [
  787. {
  788. cid: this.gid,
  789. student: JSON.stringify([this.classid]),
  790. },
  791. ];
  792. this.ajax
  793. .post(this.$store.state.api + "addGradeClass", params)
  794. .then((res) => {
  795. this.gid = "";
  796. this.classid = "";
  797. this.dialogVisibleGrade = false;
  798. this.getClass();
  799. })
  800. .catch((err) => {
  801. console.error(err);
  802. });
  803. })
  804. .catch(() => {});
  805. },
  806. openUpdate(id, n) {
  807. this.classid = id;
  808. this.className1 = n;
  809. this.dialogVisible1 = true;
  810. },
  811. //新增班级
  812. insertClass() {
  813. let params = {
  814. name: this.className,
  815. oid: this.oid,
  816. uid: this.userid,
  817. };
  818. this.ajax
  819. .get(this.$store.state.api + "insertClass", params)
  820. .then((res) => {
  821. if (res.data[0] && res.data[0][0].classname == 1) {
  822. this.$message({
  823. message: "不能与其他班级名称相同!",
  824. type: "error",
  825. });
  826. } else {
  827. this.$message({
  828. message: "新增成功",
  829. type: "success",
  830. });
  831. this.dialogVisible = false;
  832. this.sClassName = "";
  833. this.getClass();
  834. this.className = "";
  835. }
  836. })
  837. .catch((err) => {
  838. this.$message({
  839. message: "新增失败",
  840. type: "error",
  841. });
  842. console.error(err);
  843. });
  844. },
  845. //修改班级
  846. updateClass() {
  847. let params = {
  848. id: this.classid,
  849. n: this.className1,
  850. oid: this.oid,
  851. };
  852. this.ajax
  853. .get(this.$store.state.api + "updateClass", params)
  854. .then((res) => {
  855. if (res.data[0] && res.data[0][0].classname == 1) {
  856. this.$message({
  857. message: "不能与其他班级名称相同!",
  858. type: "error",
  859. });
  860. } else {
  861. this.$message({
  862. message: "修改成功",
  863. type: "success",
  864. });
  865. this.dialogVisible1 = false;
  866. this.getClass();
  867. this.classid = "";
  868. this.className1 = "";
  869. }
  870. })
  871. .catch((err) => {
  872. this.$message({
  873. message: "修改失败",
  874. type: "error",
  875. });
  876. console.error(err);
  877. });
  878. },
  879. //获取班级列表
  880. getClass() {
  881. this.isLoading = true;
  882. let params = {
  883. // username: this.$store.state.userInfo.userid,
  884. cu: "",
  885. oid: this.oid,
  886. cn: this.sClassName,
  887. page: this.page,
  888. };
  889. this.ajax
  890. .get(this.$store.state.api + "selectClass", params)
  891. .then((res) => {
  892. this.isLoading = false;
  893. this.total = res.data[0].length > 0 ? res.data[0][0].num : 0;
  894. this.tableData = res.data[0];
  895. })
  896. .catch((err) => {
  897. this.isLoading = false;
  898. console.error(err);
  899. });
  900. },
  901. //删除班级
  902. deleteClass(id) {
  903. let params = {
  904. id: id,
  905. };
  906. if (this.time()) {
  907. this.$confirm("确定删除此班级吗?", "提示", {
  908. confirmButtonText: "确定",
  909. cancelButtonText: "取消",
  910. type: "warning",
  911. })
  912. .then(() => {
  913. this.ajax
  914. .get(this.$store.state.api + "deleteClass", params)
  915. .then((res) => {
  916. this.$message({
  917. message: "删除成功",
  918. type: "success",
  919. });
  920. if (this.page != 1 && this.tableData.length == 1) {
  921. this.page - 1;
  922. }
  923. this.getClass();
  924. })
  925. .catch((err) => {
  926. this.$message.error("删除失败");
  927. console.error(err);
  928. });
  929. })
  930. .catch(() => {});
  931. }
  932. },
  933. addStudent() {
  934. // this.dialogVisibleAddStudent = true;
  935. // (this.sName = ""), (this.sPhone = ""), (this.sByClass = ""), this.sMail;
  936. // this.getClass2();
  937. this.dialogVisibleMember = true;
  938. this.searchTN = "";
  939. this.getClassStudent();
  940. },
  941. //新增学生
  942. insertStudent() {
  943. if (this.sName === "") {
  944. this.$message.error("学生姓名不能为空");
  945. return;
  946. } else if (
  947. this.sPhone != "" &&
  948. !/^[1][3,4,5,7,8][0-9]{9}$/.test(this.sPhone)
  949. ) {
  950. this.$message.error("手机号格式不正确");
  951. return;
  952. } else if (
  953. !/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/.test(this.sMail)
  954. ) {
  955. this.$message.error("邮箱格式不正确");
  956. return;
  957. }
  958. if (this.time()) {
  959. let params = { un: this.sMail };
  960. this.ajax
  961. .get(this.$store.state.api + "findMail", params)
  962. .then((res) => {
  963. if (res.data[0].length > 0) {
  964. this.$message.error("此学生账号已被注册");
  965. } else {
  966. this.add_Student();
  967. }
  968. })
  969. .catch((err) => {
  970. console.error(err);
  971. });
  972. }
  973. },
  974. add_Student() {
  975. let params = [
  976. {
  977. username: this.sMail,
  978. userpassword: 'Coco1234',
  979. alias: this.sName,
  980. oid: this.oid,
  981. ph: this.sPhone,
  982. sid: this.sId,
  983. cid: this.cid,
  984. },
  985. ];
  986. this.ajax
  987. .post(this.$store.state.api + "batchRegistration", params)
  988. .then((res) => {
  989. let params = [
  990. {
  991. userid: res.data.uid,
  992. username: this.sName,
  993. sid: this.sId,
  994. type: 2,
  995. oid: res.data.oid,
  996. phone: res.data.ph,
  997. cid: res.data.cid,
  998. intro: "",
  999. sex: "0",
  1000. },
  1001. ];
  1002. this.ajax
  1003. .post(this.$store.state.api + "updateUserByEdu", params)
  1004. .then((res) => {
  1005. console.log(res);
  1006. })
  1007. .catch((err) => {
  1008. console.error(err);
  1009. });
  1010. this.$message({
  1011. message: "新增成功",
  1012. type: "success",
  1013. });
  1014. this.dialogVisibleAddStudent = false;
  1015. this.sPhone = "";
  1016. this.sName = "";
  1017. this.sByClass = [];
  1018. this.sMail = "";
  1019. this.getStudent(this.cid);
  1020. })
  1021. .catch((err) => {
  1022. this.isLoading = false;
  1023. this.$message({
  1024. message: "新增失败",
  1025. type: "error",
  1026. });
  1027. console.error(err);
  1028. });
  1029. },
  1030. updateStudentA(res) {
  1031. this.userinfo = JSON.parse(JSON.stringify(res));
  1032. this.userinfoA = JSON.parse(JSON.stringify(res));
  1033. this.userinfo.classid = this.userinfo.classid.split(",");
  1034. this.dialogVisibleUpdate = true;
  1035. },
  1036. updateStudent() {
  1037. if (this.userinfo.name === "") {
  1038. this.$message.error("学生姓名不能为空");
  1039. return;
  1040. } else if (!this.userinfo.classid) {
  1041. this.$message.error("请为学生选择班级");
  1042. return;
  1043. } else if (
  1044. this.userinfo.phonenumber &&
  1045. !/^[1][3,4,5,7,8][0-9]{9}$/.test(this.userinfo.phonenumber)
  1046. ) {
  1047. this.$message.error("手机号格式不正确");
  1048. return;
  1049. } else if (
  1050. !/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/.test(
  1051. this.userinfo.un
  1052. )
  1053. ) {
  1054. this.$message.error("邮箱格式不正确");
  1055. return;
  1056. }
  1057. if (this.time()) {
  1058. if (this.userinfoA.un != this.userinfo.un) {
  1059. let params = { un: this.userinfo.un };
  1060. this.ajax
  1061. .get(this.$store.state.api + "findMail", params)
  1062. .then((res) => {
  1063. if (res.data[0].length > 0) {
  1064. this.$message.error("此学生账号已被注册");
  1065. } else {
  1066. this.update_Student();
  1067. }
  1068. })
  1069. .catch((err) => {
  1070. console.error(err);
  1071. });
  1072. } else {
  1073. this.update_Student();
  1074. }
  1075. }
  1076. },
  1077. update_Student() {
  1078. let params = [
  1079. {
  1080. userid: this.userinfo.userid,
  1081. username: this.userinfo.un,
  1082. alias: this.userinfo.name,
  1083. ph: this.userinfo.phonenumber,
  1084. sid: this.userinfo.studentid,
  1085. cid: this.userinfo.classid.join(","),
  1086. },
  1087. ];
  1088. this.ajax
  1089. .post(this.$store.state.api + "updateStudentInfo", params)
  1090. .then((res) => {
  1091. this.$message({
  1092. message: "修改成功",
  1093. type: "success",
  1094. });
  1095. this.dialogVisibleUpdate = false;
  1096. this.getStudent(this.cid);
  1097. })
  1098. .catch((err) => {
  1099. this.isLoading = false;
  1100. this.$message({
  1101. message: "修改失败",
  1102. type: "error",
  1103. });
  1104. console.error(err);
  1105. });
  1106. },
  1107. deleteClassStudent(id) {
  1108. let params = [{ uid: id, cid: this.cid }];
  1109. this.$confirm("确定移除此学生在本班级吗?", "提示", {
  1110. confirmButtonText: "确定",
  1111. cancelButtonText: "取消",
  1112. type: "warning",
  1113. })
  1114. .then(() => {
  1115. this.ajax
  1116. .post(this.$store.state.api + "deleteClassStudent", params)
  1117. .then((res) => {
  1118. this.$message({
  1119. message: "操作成功",
  1120. type: "success",
  1121. });
  1122. this.getStudent(this.cid);
  1123. })
  1124. .catch((err) => {
  1125. this.$message.error("操作失败");
  1126. console.error(err);
  1127. });
  1128. })
  1129. .catch(() => {});
  1130. },
  1131. //获取班级列表
  1132. getClass2() {
  1133. let params = {
  1134. oid: this.oid,
  1135. };
  1136. this.ajax
  1137. .get(this.$store.state.api + "selectClassBySchool", params)
  1138. .then((res) => {
  1139. this.classJuri = res.data[0];
  1140. })
  1141. .catch((err) => {
  1142. console.error(err);
  1143. });
  1144. },
  1145. getSchoolName() {
  1146. let params = {
  1147. oid: this.oid,
  1148. };
  1149. this.ajax
  1150. .get(this.$store.state.api + "selectSchoolName2", params)
  1151. .then((res) => {
  1152. this.schoolName = res.data[0][0].name;
  1153. })
  1154. .catch((err) => {
  1155. console.error(err);
  1156. });
  1157. },
  1158. searchStudent() {
  1159. this.page2 = 1;
  1160. this.getStudent(this.cid);
  1161. },
  1162. handleCurrentChange2(val) {
  1163. this.page2 = val;
  1164. this.getStudent(this.cid);
  1165. },
  1166. handleCurrentChange3(val) {
  1167. this.page3 = val;
  1168. this.getClassStudent();
  1169. },
  1170. getStudent(cid) {
  1171. this.cid = cid;
  1172. this.ctype = 2;
  1173. this.isLoading = true;
  1174. let params = {
  1175. oid: this.oid,
  1176. cid: this.cid,
  1177. cu: "",
  1178. cn: this.sPhoneUser,
  1179. page: this.page2,
  1180. };
  1181. this.ajax
  1182. .get(this.$store.state.api + "selectStudent2", params)
  1183. .then((res) => {
  1184. this.isLoading = false;
  1185. this.total2 = res.data[0].length > 0 ? res.data[0][0].num : 0;
  1186. this.tableData2 = res.data[0];
  1187. this.getClass2();
  1188. })
  1189. .catch((err) => {
  1190. this.isLoading = false;
  1191. console.error(err);
  1192. });
  1193. },
  1194. getClassStudent() {
  1195. this.isLoading2 = true;
  1196. let params = {
  1197. oid: this.oid,
  1198. cid: this.cid,
  1199. cn: this.searchTN,
  1200. page: this.page3,
  1201. num: this.pageSize3,
  1202. };
  1203. this.ajax
  1204. .get(this.$store.state.api + "getClassStudent", params)
  1205. .then((res) => {
  1206. this.isLoading2 = false;
  1207. this.total3 = res.data[0].length > 0 ? res.data[0][0].num : 0;
  1208. this.teacherJuri = res.data[0];
  1209. })
  1210. .catch((err) => {
  1211. this.isLoading2 = false;
  1212. console.error(err);
  1213. });
  1214. },
  1215. addClassStudent() {
  1216. if (!this.checkboxList3.length) {
  1217. this.$message.error("请选择要添加班级的学生");
  1218. return;
  1219. }
  1220. let params = [
  1221. {
  1222. cid: this.cid,
  1223. student: JSON.stringify(this.checkboxList3),
  1224. },
  1225. ];
  1226. this.ajax
  1227. .post(this.$store.state.api + "addClassStudent", params)
  1228. .then((res) => {
  1229. this.checkboxList3 = [];
  1230. this.dialogVisibleMember = false;
  1231. this.getStudent(this.cid);
  1232. })
  1233. .catch((err) => {
  1234. console.error(err);
  1235. });
  1236. },
  1237. iniPassword(id) {
  1238. this.$confirm("确定" + "初始化" + "此学生的密码吗?", "提示", {
  1239. confirmButtonText: "确定",
  1240. cancelButtonText: "取消",
  1241. type: "warning",
  1242. })
  1243. .then(() => {
  1244. let params = [
  1245. {
  1246. uid: id,
  1247. pa: 'Coco1234',
  1248. },
  1249. ];
  1250. this.ajax
  1251. .post(this.$store.state.api + "iniPassword", params)
  1252. .then((res) => {
  1253. this.$message({
  1254. message: "初始化密码成功!",
  1255. type: "success",
  1256. });
  1257. })
  1258. .catch((err) => {
  1259. console.error(err);
  1260. });
  1261. })
  1262. .catch(() => {});
  1263. },
  1264. },
  1265. };
  1266. </script>
  1267. <style scoped>
  1268. .dialog_diy >>> .el-dialog__header {
  1269. background: #3d67bc !important;
  1270. padding: 15px 20px;
  1271. }
  1272. .dialog_diy >>> .el-dialog__title {
  1273. color: #fff;
  1274. }
  1275. .student_table >>> .el-table--border td {
  1276. border-right: 0px !important;
  1277. }
  1278. .dialog_diy >>> .el-dialog__headerbtn {
  1279. top: 19px;
  1280. }
  1281. .dialog_diy >>> .el-dialog__headerbtn .el-dialog__close {
  1282. color: #fff;
  1283. }
  1284. .dialog_diy >>> .el-dialog__headerbtn .el-dialog__close:hover {
  1285. color: #fff;
  1286. }
  1287. .student_head >>> .el-button--primary {
  1288. background-color: #2268bc;
  1289. }
  1290. .xls_button {
  1291. font-size: 14px;
  1292. cursor: pointer;
  1293. text-decoration: underline;
  1294. color: rgb(34, 104, 188);
  1295. }
  1296. .pb_head {
  1297. margin: 0 !important;
  1298. width: 100% !important;
  1299. }
  1300. .student_page {
  1301. margin-top: 10px;
  1302. }
  1303. .student_head {
  1304. margin-top: 10px;
  1305. padding-bottom: 15px;
  1306. display: flex;
  1307. justify-content: space-between;
  1308. }
  1309. .student_search {
  1310. display: flex;
  1311. width: 300px;
  1312. line-height: 40px;
  1313. align-items: center;
  1314. }
  1315. .student_search span {
  1316. /* margin: 0 10px 0 0; */
  1317. }
  1318. .student_button {
  1319. /* display: flex; */
  1320. /* height: 40px; */
  1321. }
  1322. .student_button .el-button--primary {
  1323. /* margin-right: 10px; */
  1324. }
  1325. .upload-demo {
  1326. display: flex;
  1327. flex-direction: column;
  1328. align-items: end;
  1329. /* position: relative; */
  1330. width: 100px;
  1331. overflow: hidden;
  1332. }
  1333. .student_table {
  1334. /* margin: 20px 0; */
  1335. }
  1336. .el-table >>> .even_row {
  1337. background-color: #f1f1f1;
  1338. }
  1339. .top {
  1340. display: flex;
  1341. justify-content: space-between;
  1342. }
  1343. .bgColor {
  1344. background: #2167bc;
  1345. }
  1346. .student_table >>> .el-table,
  1347. .student_table >>> .el-table__body-wrapper {
  1348. height: auto !important;
  1349. }
  1350. .student_head {
  1351. margin-top: 10px;
  1352. padding-bottom: 10px;
  1353. display: flex;
  1354. justify-content: space-between;
  1355. }
  1356. .head_left {
  1357. display: flex;
  1358. align-items: center;
  1359. line-height: 40px;
  1360. }
  1361. .head_right {
  1362. display: flex;
  1363. flex-direction: row;
  1364. flex-wrap: nowrap;
  1365. align-items: center;
  1366. line-height: 40px;
  1367. }
  1368. /* .student_input>>>.el-input__inner {
  1369. width: 190px;
  1370. font-size: 13px;
  1371. padding: 0 10px;
  1372. }
  1373. */
  1374. .student_button {
  1375. color: #fff;
  1376. background: #2268bc;
  1377. }
  1378. .head_right > button:nth-child(1) {
  1379. color: #fff;
  1380. background: #2268bc;
  1381. }
  1382. .head_right > div {
  1383. line-height: 40px;
  1384. margin-left: 10px;
  1385. color: #2a6dbe;
  1386. text-decoration: underline;
  1387. cursor: pointer;
  1388. }
  1389. .userImg {
  1390. display: flex;
  1391. flex-direction: row;
  1392. justify-content: center;
  1393. align-items: center;
  1394. }
  1395. .tx {
  1396. width: 40px;
  1397. margin-right: 10px;
  1398. }
  1399. .delete {
  1400. width: 25px;
  1401. height: 25px;
  1402. cursor: pointer;
  1403. margin-left: 10px;
  1404. }
  1405. .tx > img,
  1406. .delete > img {
  1407. width: 100%;
  1408. height: 100%;
  1409. }
  1410. .btnBox {
  1411. display: flex;
  1412. align-items: center;
  1413. }
  1414. .add_student >>> .el-dialog__header {
  1415. padding: 20px 20px 10px;
  1416. text-align: center;
  1417. background: #32455b;
  1418. }
  1419. .add_student >>> .el-dialog__title {
  1420. font-size: 14px !important;
  1421. color: #fff !important;
  1422. }
  1423. .add_student >>> .el-dialog__headerbtn {
  1424. font-size: 20px !important;
  1425. }
  1426. .add_student >>> .el-form-item__label {
  1427. margin-left: 65px;
  1428. }
  1429. .add_student >>> .el-form-item {
  1430. display: flex;
  1431. }
  1432. .add_student >>> .el-form-item__content {
  1433. margin: 0 !important;
  1434. }
  1435. .add_input {
  1436. width: 365px;
  1437. }
  1438. .add_student >>> .el-dialog__footer {
  1439. text-align: center !important;
  1440. }
  1441. .right {
  1442. width: 250px;
  1443. color: #fff;
  1444. background: #0e72e6;
  1445. margin-bottom: 20px;
  1446. }
  1447. .header-title {
  1448. display: flex;
  1449. }
  1450. .logoImg {
  1451. width: 30px;
  1452. }
  1453. .logoImg > img {
  1454. width: 100%;
  1455. height: 100%;
  1456. }
  1457. .title_add_student {
  1458. margin: 0 auto;
  1459. color: #fff;
  1460. }
  1461. .upload-demo {
  1462. line-height: 0px !important;
  1463. }
  1464. .upload-demo >>> .el-button {
  1465. color: #fff;
  1466. background: #2268bc;
  1467. width: 70px;
  1468. height: 30px;
  1469. padding: 0 !important;
  1470. font-size: 12px;
  1471. line-height: 0 !important;
  1472. }
  1473. .people {
  1474. border: 1px solid rgb(229 229 229);
  1475. height: 495px;
  1476. border-radius: 5px;
  1477. width: 100%;
  1478. overflow: auto;
  1479. }
  1480. .people_top {
  1481. display: flex;
  1482. width: 100%;
  1483. /* justify-content: space-between; */
  1484. /* align-items: center; */
  1485. flex-direction: column;
  1486. padding: 10px 25px 0;
  1487. box-sizing: border-box;
  1488. }
  1489. .people_nav,
  1490. .people_top_right {
  1491. /* padding: 20px 0 0 20px; */
  1492. }
  1493. .people_top_right {
  1494. height: 40px;
  1495. margin-bottom: 10px;
  1496. }
  1497. .people_search {
  1498. display: flex;
  1499. position: relative;
  1500. }
  1501. .people_search >>> .el-input__inner {
  1502. /* height: 25px; */
  1503. width: 95%;
  1504. }
  1505. .search_img {
  1506. width: 20px;
  1507. height: 20px;
  1508. position: absolute;
  1509. right: 30px;
  1510. top: 50%;
  1511. transform: translateY(-50%);
  1512. }
  1513. .search_img > img {
  1514. width: 100%;
  1515. height: 100%;
  1516. }
  1517. .people_name {
  1518. display: flex;
  1519. justify-content: flex-start;
  1520. padding: 10px 0 0 25px;
  1521. flex-direction: column;
  1522. flex-wrap: nowrap;
  1523. height: calc(100% - 140px);
  1524. overflow-y: auto;
  1525. overflow-x: hidden;
  1526. flex-direction: column;
  1527. }
  1528. .people_name >>> .el-checkbox {
  1529. width: 100%;
  1530. display: flex;
  1531. align-items: center;
  1532. margin-bottom: 10px;
  1533. }
  1534. .people_name >>> .el-checkbox__label {
  1535. text-overflow: ellipsis;
  1536. overflow: hidden;
  1537. width: 100%;
  1538. }
  1539. .addNewPP >>> .el-dialog__body {
  1540. padding: 5px 20px;
  1541. }
  1542. .t_j_box {
  1543. display: flex;
  1544. }
  1545. .t_j_box span:nth-child(1) {
  1546. width: 50%;
  1547. overflow: hidden;
  1548. margin-right: 10px;
  1549. text-overflow: ellipsis;
  1550. white-space: nowrap;
  1551. }
  1552. .t_j_box span:nth-child(2) {
  1553. width: 50%;
  1554. overflow: hidden;
  1555. margin-right: 10px;
  1556. text-overflow: ellipsis;
  1557. white-space: nowrap;
  1558. }
  1559. .student_input >>> .el-input__inner {
  1560. height: 30px;
  1561. width: 190px;
  1562. font-size: 13px;
  1563. padding: 0 10px;
  1564. }
  1565. .student_input.el-input {
  1566. width: auto;
  1567. }
  1568. .student_input {
  1569. margin-right: 10px;
  1570. }
  1571. .student_input >>> .el-input__icon {
  1572. line-height: unset;
  1573. }
  1574. .student_button {
  1575. color: #fff;
  1576. background: #2268bc;
  1577. width: 60px;
  1578. height: 30px;
  1579. padding: 0 !important;
  1580. font-size: 12px;
  1581. line-height: 30px;
  1582. }
  1583. .sub_head {
  1584. position: relative;
  1585. }
  1586. .sub_head::after {
  1587. content: "";
  1588. width: 100%;
  1589. background: #5a9cea;
  1590. height: 2px;
  1591. position: absolute;
  1592. left: 0;
  1593. bottom: -10px;
  1594. }
  1595. .subClick {
  1596. /* font-size: 16px; */
  1597. font-size: 26px;
  1598. cursor: pointer;
  1599. /* margin-left: 17.5px; */
  1600. /* color: #ab582f; */
  1601. /* color: #409eff; */
  1602. color: #999;
  1603. }
  1604. .subClick:hover {
  1605. color: #000;
  1606. }
  1607. .sub_head + .subClick,
  1608. .subClick + .subClick,
  1609. .subClick + .sub_head {
  1610. margin-left: 17.5px;
  1611. }
  1612. .classButtonBox {
  1613. display: flex;
  1614. flex-direction: row;
  1615. flex-wrap: wrap;
  1616. align-items: center;
  1617. }
  1618. .classButtonBox >>> .el-button:not(:last-child),.classButtonBox >>> .el-button:not(:first-child){
  1619. margin-left: 10px;
  1620. }
  1621. </style>