Marking.vue 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801
  1. <template>
  2. <div v-loading="loading" element-loading-text="拼命加载中">
  3. <section class="content-header">
  4. <span>
  5. <span class="pull-left">
  6. <small class="marktitle titlefont">
  7. <span>课程:{{ task.courseName }}</span>
  8. </small>
  9. <small class="marktitle titlefont">
  10. <span>试卷编号:{{ task.basePaperName }}</span>
  11. </small>
  12. <small class="marktitle titlefont">
  13. <span>试卷ID:{{ studentPaper.examRecordDataId }}</span>
  14. </small>
  15. <small class="marktitle titlefont">
  16. <span>客观分:{{ studentPaper.objectiveScore }}</span>
  17. </small>
  18. <small class="marktitle titlefont">
  19. <span>待评:{{ task.leftCount }}</span>
  20. </small>
  21. <small class="marktitle titlefont">
  22. <span>
  23. 进度:{{
  24. (
  25. ((task.totalCount - task.leftCount) * 100) /
  26. task.totalCount
  27. ).toFixed(2)
  28. }}%
  29. </span>
  30. </small>
  31. <small class="marktitle">
  32. <el-button-group>
  33. <el-button size="small">
  34. <span class="titlefont">已评</span>
  35. </el-button>
  36. <el-button size="small" @click="markedClick">
  37. <span class="titlefont">{{ task.markedCount }}</span>
  38. </el-button>
  39. </el-button-group>
  40. </small>
  41. <small class="marktitle">
  42. <el-button
  43. class="course-tags"
  44. type="primary"
  45. size="small"
  46. @click="taskChange"
  47. >
  48. <span class="titlefont">
  49. 切换任务 <i class="el-icon-caret-bottom el-icon--right"></i>
  50. </span>
  51. </el-button>
  52. </small>
  53. <el-dialog title="切换任务" :visible.sync="taskVisible" width="80%">
  54. <div class="scroll">
  55. <el-form
  56. :inline="true"
  57. :model="taskFormSearch"
  58. label-position="right"
  59. label-width="70px"
  60. >
  61. <el-form-item label="课程代码" class="pull-left">
  62. <el-input
  63. v-model="taskFormSearch.courseCode"
  64. placeholder="课程代码"
  65. ></el-input>
  66. </el-form-item>
  67. <el-form-item label="课程名称" class="pull-left">
  68. <el-input
  69. v-model="taskFormSearch.courseName"
  70. placeholder="课程名称"
  71. ></el-input>
  72. </el-form-item>
  73. <el-form-item class="pull-right">
  74. <el-button
  75. type="primary"
  76. icon="search"
  77. @click="getChangeTasks"
  78. >查询</el-button
  79. >
  80. </el-form-item>
  81. </el-form>
  82. <el-table :data="changeTasks" border style="width: 100%" script>
  83. <el-table-column
  84. label="课程代码"
  85. width="250"
  86. prop="courseCode"
  87. />
  88. <el-table-column
  89. label="课程名称"
  90. width="200"
  91. prop="courseName"
  92. />
  93. <el-table-column
  94. label="任务"
  95. width="200"
  96. prop="markRangeName"
  97. />
  98. <el-table-column label="已评" prop="markedCount" />
  99. <el-table-column label="待评" prop="leftCount" />
  100. <el-table-column :context="_self" label="操作">
  101. <template slot-scope="scope">
  102. <div>
  103. <el-button
  104. size="small"
  105. type="success"
  106. @click="tasksSelect(scope.$index, scope.row)"
  107. >选择</el-button
  108. >
  109. </div>
  110. </template>
  111. </el-table-column>
  112. </el-table>
  113. <div class="page pull-right">
  114. <el-pagination
  115. background
  116. :current-page="taskCurrentPage"
  117. :page-size="taskPageSize"
  118. layout="total, prev, pager, next, jumper"
  119. :total="changeTaskTotal"
  120. @current-change="taskCurrentChange"
  121. ></el-pagination>
  122. </div>
  123. </div>
  124. </el-dialog>
  125. <el-dialog
  126. title="已评任务"
  127. :visible.sync="markedTaskVisible"
  128. width="80%"
  129. >
  130. <div class="scroll">
  131. <el-table :data="markedResults" border style="width: 100%" script>
  132. <el-table-column
  133. label="试卷ID"
  134. width="100"
  135. prop="examRecordDataId"
  136. />
  137. <el-table-column label="得分" prop="score" />
  138. <el-table-column label="评阅时间">
  139. <template slot-scope="scope">
  140. <div>
  141. <span style="margin-left: 10px">{{
  142. dateFormatter(scope.row)
  143. }}</span>
  144. </div>
  145. </template>
  146. </el-table-column>
  147. <el-table-column label="问题卷">
  148. <template slot-scope="scope">
  149. <div>
  150. <span style="margin-left: 10px">{{
  151. getTagName(scope.row.tag)
  152. }}</span>
  153. </div>
  154. </template>
  155. </el-table-column>
  156. <el-table-column label="评卷备注">
  157. <template slot-scope="scope">
  158. <div>
  159. <span style="margin-left: 10px">{{
  160. scope.row.markRemark
  161. }}</span>
  162. </div>
  163. </template>
  164. </el-table-column>
  165. <el-table-column :context="_self" label="操作">
  166. <template slot-scope="scope">
  167. <div>
  168. <el-button
  169. size="small"
  170. type="success"
  171. @click="markTaskSelect(scope.$index, scope.row)"
  172. >选择</el-button
  173. >
  174. </div>
  175. </template>
  176. </el-table-column>
  177. </el-table>
  178. <div class="page pull-right">
  179. <el-pagination
  180. background
  181. :current-page="markedCurrentPage"
  182. :page-size="markedPageSize"
  183. :page-sizes="[10, 20, 50, 100, 200, 300]"
  184. layout="total, sizes, prev, pager, next, jumper"
  185. :total="markedTotal"
  186. @current-change="markedCurrentChange"
  187. @size-change="markedSizeChange"
  188. ></el-pagination>
  189. </div>
  190. </div>
  191. </el-dialog>
  192. </span>
  193. <span class="pull-right icon-right">
  194. <small class="marktitle titlefont">
  195. <span class="titlefont">
  196. <v-icon name="user" style="height: 12px" />
  197. {{ user.displayName }}
  198. </span>
  199. </small>
  200. <small class="marktitle titlefont marksign">
  201. <el-button
  202. type="success"
  203. size="small"
  204. icon="el-icon-arrow-left"
  205. @click="backIndex"
  206. >
  207. <!-- <v-icon name="sign-out-alt" scale="0.5"/> -->
  208. <span class="titlefont">返回</span>
  209. </el-button>
  210. </small>
  211. </span>
  212. </span>
  213. </section>
  214. <section class="content">
  215. <div class="box box-info backcolor">
  216. <div class="box-body">
  217. <!-- 文本图片阅卷主界面 -->
  218. <tpMain
  219. :paper-mark-sign="paperMarkSign"
  220. :sign-item="signItem"
  221. :sign-scores="signScores"
  222. :sign-option="signOption"
  223. :mark-sign="markSign"
  224. :student-paper="studentPaper"
  225. :exam-type="examType"
  226. :answer-html="answerHtml"
  227. @changePaperSign="changePaperSign"
  228. @clearScores="clearScores"
  229. @changeSignScores="changeSignScores"
  230. ></tpMain>
  231. <!-- 文本图片给分板 -->
  232. <tpScoreboard
  233. :objective-score="studentPaper.objectiveScore"
  234. :paper-mark-sign="paperMarkSign"
  235. :sign-item="signItem"
  236. :sign-scores="signScores"
  237. :sign-option="signOption"
  238. :mark-sign="markSign"
  239. :paper-mark="paperMark"
  240. :marked-result="markedResult"
  241. :result-items="resultItems"
  242. :student-paper-id="studentPaper.id"
  243. :score-step="studentPaper.scoreStep"
  244. :mark-task-id="task.id"
  245. @submitMark="getNext"
  246. @changeSign="changeSign"
  247. ></tpScoreboard>
  248. </div>
  249. </div>
  250. </section>
  251. </div>
  252. </template>
  253. <script>
  254. import { mapState } from "vuex";
  255. import TpMain from "./TpMain.vue";
  256. import TpScoreBoard from "./TpScoreBoard.vue";
  257. import {
  258. MARKING_API,
  259. DATA_PROCESS_API,
  260. QUESTION_API,
  261. } from "@/constants/constants";
  262. export default {
  263. components: {
  264. tpMain: TpMain,
  265. tpScoreboard: TpScoreBoard,
  266. },
  267. data() {
  268. return {
  269. markSign: false,
  270. paperMarkSign: [],
  271. signScores: [],
  272. signItem: {},
  273. signOption: { score: 0, data: "", width: 800, height: 8000, loc: [] },
  274. tasks: [],
  275. task: {},
  276. changeTasks: [],
  277. changeTaskTotal: 0,
  278. studentPaper: {},
  279. markRange: {},
  280. resultItems: [],
  281. markedResults: [],
  282. markedResult: {},
  283. loading: true,
  284. taskCurrentPage: 1,
  285. taskPageSize: 10,
  286. taskTotal: 0,
  287. markedCurrentPage: 1,
  288. markedPageSize: 10,
  289. markedTotal: 0,
  290. pageSize: 10,
  291. mark_type: "正评",
  292. mark_task: {},
  293. taskVisible: false,
  294. markedTaskVisible: false,
  295. problemTaskVisible: false,
  296. degree: [
  297. { label: "是", value: "Y" },
  298. { label: "否", value: "N" },
  299. ],
  300. markTaskFormSearch: {
  301. courseCode: "",
  302. courseName: "",
  303. degree: "",
  304. },
  305. taskFormSearch: {
  306. courseCode: "",
  307. courseName: "",
  308. paperCode: "",
  309. },
  310. course: {},
  311. workId: "",
  312. examType: "",
  313. markSearch: {
  314. userId: "",
  315. workId: "",
  316. },
  317. //回评标志
  318. backMark: false,
  319. //获取试卷标志(成功获取true,没有试卷false)
  320. paperMark: true,
  321. tags: [],
  322. answerHtml: null,
  323. rangeId: null,
  324. };
  325. },
  326. computed: {
  327. allMarked() {
  328. if (this.tasks.length == 0) {
  329. return false;
  330. } else {
  331. for (let task of this.tasks) {
  332. if (task.leftCount > 0) {
  333. return false;
  334. }
  335. }
  336. return true;
  337. }
  338. },
  339. taskCur() {
  340. //任务及时动态切换
  341. if (this.tasks.length == 0) {
  342. return 0;
  343. } else {
  344. for (let [index, task] of this.tasks.entries()) {
  345. if (task.leftCount > 0 && !task.exceedLimit) {
  346. return index;
  347. }
  348. }
  349. return 0;
  350. }
  351. },
  352. changeTaskCur() {
  353. for (let [index, task] of this.tasks.entries()) {
  354. if (task.id == this.task.id) {
  355. return index;
  356. }
  357. }
  358. return this.taskCur;
  359. },
  360. ...mapState({ user: (state) => state.user }),
  361. },
  362. async created() {
  363. this.loading = true;
  364. await this.markInit();
  365. //await this.getChangeTasks();
  366. await this.getPaper();
  367. await this.getAnswerHtml();
  368. await this.getMarkRange();
  369. await this.getMarkedTask();
  370. this.getTags();
  371. this.loading = false;
  372. },
  373. methods: {
  374. getTags() {
  375. this.$http.get(MARKING_API + "/markResults/tag").then((response) => {
  376. this.tags = response.data;
  377. });
  378. },
  379. getTagName(code) {
  380. for (let tag of this.tags) {
  381. if (tag.code === code) {
  382. return tag.name;
  383. }
  384. }
  385. },
  386. clearScores() {
  387. this.signScores.splice(0, this.signScores.length);
  388. },
  389. changePaperSign(val) {
  390. this.paperMarkSign = val;
  391. },
  392. changeSignScores(val) {
  393. this.signScores = val;
  394. },
  395. changeSign(val) {
  396. console.log(val);
  397. this.signItem = val;
  398. },
  399. taskChange() {
  400. this.taskVisible = true;
  401. this.getChangeTasks();
  402. },
  403. async tasksSelect(index, row) {
  404. this.taskVisible = false;
  405. this.loading = true;
  406. this.answerHtml = null;
  407. await this.initMarkItem();
  408. await this.markInit();
  409. this.task = row;
  410. await this.getPaper();
  411. await this.getAnswerHtml();
  412. await this.getMarkRange();
  413. await this.getMarkedTask();
  414. this.loading = false;
  415. this.markedCurrentPage = 1;
  416. },
  417. markedClick() {
  418. this.markedTaskVisible = true;
  419. this.getMarkedTask();
  420. },
  421. problemClick() {
  422. this.problemTaskVisible = true;
  423. },
  424. backIndex() {
  425. this.$router.push({ path: "/marking/mark_setting_work/marking" });
  426. },
  427. taskCurrentChange(val) {
  428. this.taskCurrentPage = val;
  429. this.getChangeTasks();
  430. },
  431. markedCurrentChange(val) {
  432. this.markedCurrentPage = val;
  433. this.getMarkedTask();
  434. },
  435. markedSizeChange(val) {
  436. this.markedPageSize = val;
  437. this.getMarkedTask();
  438. },
  439. async markTaskSelect(index, row) {
  440. this.markedTaskVisible = false;
  441. this.loading = true;
  442. this.backMark = true;
  443. this.paperMark = true;
  444. this.textarea = row.markRemark;
  445. await this.getMarkedPaper(row.studentPaperId);
  446. await this.getMarkedResultItems(row.id);
  447. await this.getAnswerHtml();
  448. this.loading = false;
  449. },
  450. async markInit() {
  451. console.log("markInit");
  452. var self = this;
  453. this.workId = this.$route.params.workId;
  454. var userId = this.user.userId;
  455. await self.$http
  456. .get(
  457. DATA_PROCESS_API +
  458. "/markTasks?workId=" +
  459. self.workId +
  460. "&userId=" +
  461. userId
  462. )
  463. .then((response) => {
  464. self.tasks = response.data;
  465. self.taskTotal = self.tasks.length;
  466. //切换任务提交试卷后,继续维持该任务
  467. if (self.changeTaskCur != self.taskCur) {
  468. //切换任务评完后,继续跳转原来的任务
  469. if (
  470. self.tasks[self.changeTaskCur].leftCount == 0 ||
  471. self.tasks[self.changeTaskCur].exceedLimit
  472. ) {
  473. if (self.tasks[self.taskCur]) {
  474. self.task = self.tasks[self.taskCur];
  475. }
  476. } else if (self.tasks[self.changeTaskCur]) {
  477. self.task = self.tasks[self.changeTaskCur];
  478. }
  479. } else {
  480. if (self.tasks[self.taskCur]) {
  481. self.task = self.tasks[self.taskCur];
  482. }
  483. }
  484. console.log("tasks", self.tasks);
  485. });
  486. },
  487. async getChangeTasks() {
  488. console.log("getChangeTasks");
  489. var self = this;
  490. this.workId = this.$route.params.workId;
  491. var userId = this.user.userId;
  492. await self.$http
  493. .get(
  494. DATA_PROCESS_API +
  495. "/markTasks?workId=" +
  496. self.workId +
  497. "&userId=" +
  498. userId
  499. )
  500. .then((response) => {
  501. self.changeTasks = response.data;
  502. self.changeTaskTotal = self.changeTasks.length;
  503. self.filterChangeTasks();
  504. self.pagingChangeTasks();
  505. console.log("changeTasks", self.changeTasks);
  506. });
  507. },
  508. filterChangeTasks() {
  509. var tempData = this.changeTasks.filter((element) => {
  510. var flag = true;
  511. if (this.taskFormSearch.courseCode || this.taskFormSearch.courseName) {
  512. if (this.taskFormSearch.courseCode) {
  513. flag =
  514. flag &&
  515. element.courseCode.includes(this.taskFormSearch.courseCode);
  516. }
  517. if (this.taskFormSearch.courseName) {
  518. flag =
  519. flag &&
  520. element.courseName.includes(this.taskFormSearch.courseName);
  521. }
  522. return flag;
  523. } else {
  524. return flag;
  525. }
  526. });
  527. this.changeTasks = tempData;
  528. this.changeTaskTotal = tempData.length;
  529. },
  530. pagingChangeTasks() {
  531. var start = (this.taskCurrentPage - 1) * this.pageSize;
  532. var end =
  533. this.taskCurrentPage * this.pageSize < this.changeTaskTotal
  534. ? this.taskCurrentPage * this.pageSize
  535. : this.changeTaskTotal;
  536. var tempData = [];
  537. console.log(`当前页: ${this.taskCurrentPage},开始:${start},结束:${end}`);
  538. for (let i = start; i < end; i++) {
  539. tempData.push(this.changeTasks[i]);
  540. }
  541. this.changeTasks = tempData;
  542. },
  543. async getPaper() {
  544. console.log("getPaper");
  545. var self = this;
  546. await self.$http
  547. .get(DATA_PROCESS_API + "/studentPapers?markTaskId=" + self.task.id)
  548. .then((response) => {
  549. if (response.data.resultCode == "0") {
  550. self.studentPaper = response.data.data;
  551. self.examType = response.data.examType;
  552. self.paperMark = true;
  553. console.log("paper", self.studentPaper);
  554. } else {
  555. if (response.data.resultCode == "1") {
  556. self.$notify({
  557. message: "该任务下试卷已评完,如有剩余任务将自动切换任务",
  558. type: "warning",
  559. });
  560. } else if (response.data.resultCode == "2") {
  561. self.$notify({
  562. message: "您设置的阅卷任务数已完成",
  563. type: "warning",
  564. });
  565. }
  566. this.resultItems.splice(0, this.resultItems.length);
  567. self.studentPaper = { id: "" };
  568. self.paperMark = false;
  569. return false;
  570. }
  571. });
  572. return true;
  573. },
  574. async getMarkedTask() {
  575. console.log("getMarkedTask");
  576. var self = this;
  577. await self.$http
  578. .get(
  579. MARKING_API +
  580. "/markResults/" +
  581. this.task.id +
  582. "/" +
  583. this.markedCurrentPage +
  584. "/" +
  585. this.markedPageSize
  586. )
  587. .then((response) => {
  588. self.markedResults = response.data.data;
  589. self.markedTotal = response.data.pageInfo.totalElements;
  590. self.markedCurrentPage = response.data.pageInfo.page + 1;
  591. console.log("markedTask", self.markedResults);
  592. });
  593. },
  594. async getMarkedPaper(studentPaperId) {
  595. var self = this;
  596. await self.$http
  597. .get(DATA_PROCESS_API + "/studentPapers/" + studentPaperId)
  598. .then((response) => {
  599. self.studentPaper = response.data;
  600. self.examType = response.data.examType;
  601. });
  602. },
  603. async getMarkedResultItems(markResultId) {
  604. var self = this;
  605. await self.$http
  606. .get(MARKING_API + "/markResults/" + markResultId)
  607. .then((response) => {
  608. self.resultItems = response.data.resultItems;
  609. self.markedResult = response.data;
  610. console.log(self.markedResult);
  611. });
  612. },
  613. async getMarkRange() {
  614. if (!this.paperMark) {
  615. return;
  616. }
  617. if (!this.backMark && this.rangeId == this.task.markRangeId) {
  618. for (let resultItem of this.resultItems) {
  619. resultItem.score = "";
  620. }
  621. return;
  622. }
  623. this.resultItems.splice(0, this.resultItems.length);
  624. var self = this;
  625. await self.$http
  626. .get(MARKING_API + "/markRanges/" + self.task.markRangeId)
  627. .then((response) => {
  628. self.markRange = response.data;
  629. self.getResultItems(self.markRange);
  630. console.log("markRange", self.markRange);
  631. console.log("resultItems", self.resultItems);
  632. });
  633. },
  634. getResultItems(markRange) {
  635. for (let markItem of markRange.markItems) {
  636. var resultItem = { markItem: markItem, score: "" };
  637. this.resultItems.push(resultItem);
  638. }
  639. },
  640. async getNext() {
  641. if (this.rangeId == null) {
  642. this.rangeId = this.task.markRangeId;
  643. }
  644. this.answerHtml = null;
  645. //试卷全部评完且回评时不继续获取试卷
  646. if (this.backMark && this.allMarked) {
  647. this.$loading().close();
  648. return;
  649. }
  650. this.initMarkItem();
  651. await this.markInit();
  652. await this.getPaper();
  653. await this.getAnswerHtml();
  654. // await this.getChangeTasks();
  655. await this.getMarkRange();
  656. await this.getMarkedTask();
  657. this.backMark = false;
  658. this.$loading().close();
  659. },
  660. dateFormatter(row) {
  661. var fulldate = new Date(row.markedOn);
  662. var year = fulldate.getFullYear();
  663. var month = fulldate.getMonth() + 1;
  664. var date = fulldate.getDate();
  665. var formatDate = [year, month, date].join("-");
  666. return formatDate;
  667. },
  668. initMarkItem() {
  669. //this.resultItems.splice(0, this.resultItems.length);
  670. this.markResult = {};
  671. this.markedResult = {};
  672. },
  673. markSignChange() {
  674. if (this.markSign) {
  675. this.$message({
  676. showClose: true,
  677. message: "轨迹模式已开启,只支持鼠标操作",
  678. type: "warning",
  679. });
  680. }
  681. },
  682. async getAnswerHtml() {
  683. if (this.studentPaper.basePaperId && this.examType == "OFFLINE") {
  684. var paperId = this.studentPaper.basePaperId;
  685. await this.$http
  686. .get(QUESTION_API + "/extract/getAnswerHtml/" + paperId)
  687. .then((response) => {
  688. this.answerHtml = response.data;
  689. });
  690. }
  691. },
  692. },
  693. };
  694. </script>
  695. <style scoped>
  696. .el-select {
  697. width: 160px;
  698. }
  699. .content {
  700. min-height: 600px;
  701. margin-right: auto;
  702. margin-left: auto;
  703. padding-left: 15px;
  704. }
  705. small {
  706. font-size: 18px;
  707. font-weight: bold;
  708. margin-left: 10px;
  709. margin-top: 20px;
  710. }
  711. .content-header {
  712. margin-left: 15px;
  713. overflow: hidden;
  714. background-color: rgb(77, 124, 196);
  715. height: 55px;
  716. }
  717. .box-body {
  718. height: 100%;
  719. border-top-left-radius: 0;
  720. border-top-right-radius: 0;
  721. border-bottom-right-radius: 3px;
  722. border-bottom-left-radius: 3px;
  723. padding-left: 40px;
  724. padding-right: 15px;
  725. overflow: hidden;
  726. }
  727. li {
  728. list-style-type: none;
  729. }
  730. .marktitle {
  731. margin-right: 20px;
  732. margin-bottom: 10px;
  733. font-size: 18px;
  734. font-weight: 700;
  735. color: white;
  736. }
  737. .titlefont {
  738. font-size: 14px;
  739. display: inline-block;
  740. }
  741. .box-card {
  742. width: 200px;
  743. height: 120px;
  744. }
  745. .block {
  746. display: inline-block;
  747. }
  748. .text {
  749. text-align: center;
  750. }
  751. .markcount {
  752. margin-right: 10px;
  753. }
  754. .reject {
  755. color: red;
  756. }
  757. .marksign {
  758. margin-left: 20px;
  759. }
  760. .label-danger {
  761. background-color: #d9534f;
  762. color: #fff;
  763. padding: 2px;
  764. }
  765. .box {
  766. position: relative;
  767. border-radius: 3px;
  768. margin-bottom: 0px;
  769. width: 100%;
  770. }
  771. .pull-right {
  772. float: right !important;
  773. }
  774. .pull-left {
  775. float: left !important;
  776. }
  777. .scroll {
  778. overflow: auto;
  779. height: 450px;
  780. }
  781. .el-button {
  782. background: rgb(77, 124, 196);
  783. color: white;
  784. border-radius: 8px;
  785. border-color: white;
  786. }
  787. .course-tags {
  788. background: rgb(84, 191, 255);
  789. }
  790. .icon-right {
  791. margin-top: -6px;
  792. }
  793. </style>
  794. <style>
  795. .altbox {
  796. color: rgb(85, 191, 255);
  797. }
  798. </style>