tp_scoreboard.vue 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826
  1. <style scoped>
  2. .scoreboard {
  3. width: 25%;
  4. border-left: 3px solid #20a0ff;
  5. min-height: 600px;
  6. }
  7. .scroll {
  8. overflow: auto;
  9. height: 300px;
  10. }
  11. .itemScroll {
  12. overflow: auto;
  13. height: 150px;
  14. }
  15. .scoreScroll {
  16. overflow: auto;
  17. height: 100px;
  18. }
  19. .scoretitle {
  20. margin-right: 20px;
  21. margin-bottom: 20px;
  22. }
  23. li {
  24. list-style-type: none;
  25. }
  26. .scorebutton {
  27. width: 40px;
  28. height: 40px;
  29. }
  30. .titlebutton {
  31. width: 50px;
  32. height: 56px;
  33. }
  34. .actionbutton {
  35. width: 80px;
  36. height: 30px;
  37. }
  38. .score {
  39. color: red;
  40. display: block;
  41. }
  42. .totalScore {
  43. color: red;
  44. text-align: center;
  45. }
  46. .clear {
  47. clear: both;
  48. }
  49. .backcolor {
  50. background-color: #e4eaec;
  51. }
  52. .board-margin {
  53. margin-left: 20px;
  54. }
  55. .sub-btn {
  56. margin-right: 15px;
  57. }
  58. .active-btn {
  59. background-color: #4cb0f9;
  60. border-color: #4cb0f9;
  61. color: #fff;
  62. }
  63. .box-card {
  64. margin-bottom: 30px;
  65. text-align: center;
  66. }
  67. .score-input {
  68. background-color: #ecf0f5;
  69. border: 1px solid #000;
  70. border-top: 0;
  71. border-left: 0;
  72. border-right: 0;
  73. box-sizing: border-box;
  74. color: #1f2d3d;
  75. font-size: 20px;
  76. height: 30px;
  77. width: 60px;
  78. padding: 2px 10px;
  79. transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
  80. outline: none;
  81. }
  82. </style>
  83. <template>
  84. <div class="scoreboard pull-right">
  85. <div class="board-margin">
  86. <div class="pull-right">
  87. <el-switch
  88. v-model="isMouseMode"
  89. on-text="鼠标"
  90. off-text="键盘"
  91. on-color="#4cb0f9"
  92. off-color="#13ce66"
  93. ></el-switch>
  94. </div>
  95. <h3 class="totalScore">总分:{{ this.totalScore }}分</h3>
  96. <!-- 鼠标模式 -->
  97. <div v-if="isMouseMode">
  98. <el-tabs :active-name="activeName">
  99. <el-tab-pane label="评分" name="first">
  100. <ul class="itemScroll">
  101. <li
  102. :key="resultItem.markItem.id"
  103. v-for="(resultItem, index) in resultItems"
  104. class="pull-left scoretitle"
  105. >
  106. <a
  107. v-bind:class="{ 'active-btn': itemClass[index] }"
  108. :id="resultItem.markItem.id"
  109. @click="
  110. itemClick(
  111. resultItem.markItem.id,
  112. $event,
  113. resultItem.markItem.orders
  114. );
  115. "
  116. class="button button-border button-box button-primary button-small titlebutton"
  117. >
  118. <label class=""
  119. >{{ resultItem.markItem.mainNumber }}({{
  120. resultItem.markItem.orders
  121. }})</label
  122. >
  123. <label class="score">{{ resultItem.score }}分</label>
  124. </a>
  125. </li>
  126. <li class="clear"></li>
  127. </ul>
  128. </el-tab-pane>
  129. </el-tabs>
  130. <el-tabs :active-name="markType" v-if="markTypeView">
  131. <el-tab-pane label="打分" name="mouse">
  132. <ul class="scoreScroll">
  133. <li
  134. :key="score"
  135. v-for="score in itemScores"
  136. class="pull-left scoretitle"
  137. >
  138. <button
  139. @click="scoreClick(score);"
  140. class="button button-primary button-box scorebutton"
  141. >
  142. <label>{{ score }}</label>
  143. </button>
  144. </li>
  145. </ul>
  146. </el-tab-pane>
  147. </el-tabs>
  148. </div>
  149. <!-- 键盘模式 -->
  150. <div v-if="!isMouseMode">
  151. <el-tabs :active-name="activeName">
  152. <el-tab-pane label="评分" name="first">
  153. <ul class="scroll">
  154. <li
  155. :key="resultItem.markItem.id"
  156. v-for="(resultItem, index) in resultItems"
  157. class="pull-left scoretitle"
  158. >
  159. <div class="box-card">
  160. <div>
  161. <el-button-group>
  162. <el-button size="small" type="primary">
  163. <span style="font-size:15px;font-weight:bold">
  164. {{ resultItem.markItem.mainNumber }}({{
  165. resultItem.markItem.orders
  166. }})
  167. </span>
  168. </el-button>
  169. <el-button size="small" type="primary">
  170. <span style="font-size:15px;font-weight:bold">
  171. <span>{{ resultItem.markItem.maxScore }}分</span>
  172. </span>
  173. </el-button>
  174. <el-button size="small" type="primary">
  175. <span style="font-size:15px;font-weight:bold;"
  176. >间隔:{{ resultItem.markItem.scoreInterval }}
  177. </span>
  178. </el-button>
  179. </el-button-group>
  180. </div>
  181. <div
  182. style="text-align:center;font-size:15px;font-weight:bold"
  183. >
  184. <input
  185. :id="getItemId(resultItem.markItem.id)"
  186. @focus="scoreFocus(resultItem);"
  187. @keydown.enter="scoreEnter(index, resultItem);"
  188. @keydown.up="scoreUp(index, resultItem);"
  189. @keydown.down="scoreDown(index, resultItem);"
  190. @change="scoreChange(index, resultItem.score);"
  191. v-model="resultItem.score"
  192. class="score-input"
  193. />
  194. </div>
  195. </div>
  196. </li>
  197. <li class="clear"></li>
  198. </ul>
  199. </el-tab-pane>
  200. </el-tabs>
  201. </div>
  202. <el-tabs :active-name="activeName">
  203. <el-tab-pane label="备注" name="first">
  204. <ul class="scoreScroll">
  205. <li>
  206. <el-input
  207. type="textarea"
  208. :rows="3"
  209. placeholder="请输入内容"
  210. v-model="textarea"
  211. :value="this.markRemarkInfo"
  212. >
  213. </el-input>
  214. </li>
  215. </ul>
  216. </el-tab-pane>
  217. </el-tabs>
  218. <el-tabs :active-name="op">
  219. <el-tab-pane label="操作" name="first">
  220. <ul v-if="problemView">
  221. <span v-if="tagFlag">
  222. <el-radio-group
  223. v-model="markedResult.tag"
  224. @change="processTagPaper"
  225. >
  226. <li
  227. class="pull-left scoretitle"
  228. v-for="tag in tags"
  229. :key="tag.code"
  230. >
  231. <el-radio :label="tag.code">{{ tag.name }}</el-radio>
  232. </li>
  233. </el-radio-group>
  234. </span>
  235. <span v-if="!tagFlag">
  236. <el-radio-group v-model="unusualType" @change="processTagPaper">
  237. <li
  238. class="pull-left scoretitle"
  239. v-for="tag in tags"
  240. :key="tag.code"
  241. >
  242. <el-radio :label="tag.code" :key="tag.code">{{
  243. tag.name
  244. }}</el-radio>
  245. </li>
  246. </el-radio-group>
  247. </span>
  248. <li class="clear"></li>
  249. </ul>
  250. <ul>
  251. <li class="pull-left scoretitle" v-if="paperMark">
  252. <el-button
  253. id="subMarkBtn"
  254. :loading="loading"
  255. type="primary"
  256. size="large"
  257. @keydown.enter="submitMark"
  258. @click="submitMark"
  259. ><span class="sub-btn">提</span><span>交</span></el-button
  260. >
  261. </li>
  262. <li class="pull-left scoretitle" v-if="paperMark">
  263. <el-button type="danger" size="large" @click="problemClick"
  264. >问题卷</el-button
  265. >
  266. </li>
  267. <li class="pull-left scoretitle" v-if="paperMark && problemView">
  268. <el-button type="danger" size="large" @click="resetProblem"
  269. >清除问题卷</el-button
  270. >
  271. </li>
  272. </ul>
  273. </el-tab-pane>
  274. </el-tabs>
  275. </div>
  276. </div>
  277. </template>
  278. <script>
  279. import { mapActions } from "vuex";
  280. import { USER_SIGNOUT } from "../../portal/store/user";
  281. import { mapState } from "vuex";
  282. import { CORE_API, MARKING_API } from "../constants/constants";
  283. export default {
  284. data() {
  285. return {
  286. activeName: "first",
  287. markType: "mouse",
  288. isMouseMode: true,
  289. op: "first",
  290. maxScore: 0,
  291. markItemId: "",
  292. resultItem: {
  293. markItem: {},
  294. score: 0
  295. },
  296. markTypeView: false,
  297. problemView: false,
  298. markBack: false,
  299. markSame: false,
  300. markBlank: false,
  301. markDiff: false,
  302. curIndex: 0,
  303. steps: [],
  304. loading: false,
  305. tmpSignItem: this.signItem,
  306. tags: [],
  307. unusualType: "",
  308. scoreError: [],
  309. textarea: ""
  310. };
  311. },
  312. props: [
  313. "paperMarkSign",
  314. "signScores",
  315. "signChange",
  316. "signOption",
  317. "markSign",
  318. "markRange",
  319. "studentPaperId",
  320. "markTaskId",
  321. "resultItems",
  322. "markedResult",
  323. "paperMark"
  324. ],
  325. methods: {
  326. ...mapActions([USER_SIGNOUT]),
  327. resetProblem() {
  328. if (this.markedResult.tag) {
  329. this.markedResult.tag = "";
  330. }
  331. if (this.unusualType) {
  332. this.unusualType = "";
  333. }
  334. },
  335. //处理问题卷
  336. processTagPaper() {
  337. if (!this.markedResult.id) {
  338. if (this.unusualType) {
  339. for (let resultItem of this.resultItems) {
  340. resultItem.score = 0;
  341. }
  342. }
  343. } else {
  344. if (this.markedResult.tag) {
  345. for (let resultItem of this.resultItems) {
  346. resultItem.score = 0;
  347. }
  348. }
  349. }
  350. },
  351. getTags() {
  352. this.$http.get(MARKING_API + "/markResults/tag").then(response => {
  353. this.tags = response.data;
  354. //移除科目错误
  355. for (let i = 0; i < this.tags.length; i++) {
  356. if (this.tags[i].code === "SUBJECT_ERROR") {
  357. this.tags.splice(i, 1);
  358. }
  359. }
  360. });
  361. },
  362. saveMarkSign() {
  363. localStorage.removeItem(this.paperKey);
  364. localStorage.setItem(this.paperKey, JSON.stringify(this.paperMarkSign));
  365. },
  366. checkItemClass(resultItem) {
  367. if (resultItem.score.length > 0) {
  368. return true;
  369. } else {
  370. return false;
  371. }
  372. },
  373. itemClick(id, event, order) {
  374. this.markTypeView = true;
  375. this.resultItems.find((value, index) => {
  376. if (value.markItem.id === id) {
  377. this.maxScore = value.markItem.maxScore;
  378. this.markItemId = value.markItem.id;
  379. if (value.score.length > 0) {
  380. this.resultItem = value;
  381. } else {
  382. this.resultItem = {
  383. markItem: value.markItem,
  384. score: ""
  385. };
  386. }
  387. this.curIndex = index;
  388. }
  389. });
  390. this.showItemTitle();
  391. if (this.markSign) {
  392. this.tmpSignItem = this.resultItem.markItem;
  393. this.signScores.splice(0, this.signScores.length);
  394. }
  395. this.positionDiv(order);
  396. },
  397. positionDiv(order) {
  398. this.$emit("positionDiv", order);
  399. },
  400. showItemTitle() {
  401. var title =
  402. this.resultItem.markItem.mainNumber +
  403. "(" +
  404. this.resultItem.markItem.orders +
  405. ")";
  406. this.$message({
  407. showClose: true,
  408. message: "当前选择题目为" + title,
  409. type: "info",
  410. duration: 1000
  411. });
  412. },
  413. checkSignScore(score) {
  414. var sum = 0;
  415. for (let signScore of this.signScores) {
  416. sum += signScore;
  417. }
  418. if (sum + score > this.maxScore) {
  419. return false;
  420. } else {
  421. return true;
  422. }
  423. },
  424. checkScore(resultItem) {
  425. var score = resultItem.score + "";
  426. var maxScore = resultItem.markItem.maxScore + "";
  427. var scoreInterval = resultItem.markItem.scoreInterval + "";
  428. if (score.trim().length === 0) {
  429. this.$notify({
  430. message: "分数不能为空",
  431. type: "error",
  432. duration: 1000
  433. });
  434. return false;
  435. } else {
  436. let regex = scoreInterval == 1 ? "^\\d+$" : "^\\d+(\\.[5])?$";
  437. if (!score.match(regex)) {
  438. this.$notify({
  439. message: "分数必须为数字,且格式要正确(包括间隔分)",
  440. type: "error",
  441. duration: 1000
  442. });
  443. return false;
  444. } else {
  445. if (parseFloat(score) > parseFloat(maxScore)) {
  446. this.$notify({
  447. message: "分数不能超过" + maxScore + "分",
  448. type: "error",
  449. duration: 1000
  450. });
  451. return false;
  452. }
  453. }
  454. }
  455. return true;
  456. },
  457. scoreClick(score) {
  458. //轨迹模式处理分值问题
  459. if (this.markSign) {
  460. if (this.checkSignScore(score)) {
  461. this.signScores.push(score);
  462. this.signOption.score = score;
  463. this.resultItem.score = this.signScoreSum;
  464. this.resultItems[this.curIndex].score = this.signScoreSum;
  465. } else {
  466. this.$notify({
  467. message: "轨迹总分不能超过满分",
  468. type: "error"
  469. });
  470. }
  471. } else {
  472. //正常模式
  473. this.resultItem.score = score;
  474. this.resultItems[this.curIndex].score = score;
  475. }
  476. },
  477. //键盘打分板change事件
  478. scoreChange(index, score) {
  479. this.resultItem.score = score;
  480. this.resultItems[index].score = score;
  481. },
  482. //键盘打分板聚焦后试卷跳转对应试题
  483. scoreFocus(resultItem) {
  484. var order = resultItem.markItem.orders;
  485. this.positionDiv(order);
  486. },
  487. //键盘打分板下键跳转下一题
  488. scoreDown(index, resultItem) {
  489. var curItemId = this.resultItems[index].markItem.id;
  490. var curItemInput = "item" + curItemId;
  491. if (!this.checkScore(resultItem)) {
  492. document.getElementById(curItemInput).focus();
  493. return;
  494. }
  495. if (index === this.resultItems.length - 1) {
  496. return;
  497. } else {
  498. var nextResultItem = this.resultItems[index + 1];
  499. var nextItemId = nextResultItem.markItem.id;
  500. var nextItemInput = "item" + nextItemId;
  501. var order = nextResultItem.markItem.orders;
  502. document.getElementById(nextItemInput).focus();
  503. this.positionDiv(order);
  504. }
  505. },
  506. //键盘打分板上键跳转上一题
  507. scoreUp(index, resultItem) {
  508. var curItemId = this.resultItems[index].markItem.id;
  509. var curItemInput = "item" + curItemId;
  510. if (!this.checkScore(resultItem)) {
  511. document.getElementById(curItemInput).focus();
  512. return;
  513. }
  514. if (index === 0) {
  515. let preResultItem = this.resultItems[0];
  516. let preItemId = preResultItem.markItem.id;
  517. let preItemInput = "item" + preItemId;
  518. let order = preResultItem.markItem.orders;
  519. document.getElementById(preItemInput).focus();
  520. this.positionDiv(order);
  521. } else {
  522. let preResultItem = this.resultItems[index - 1];
  523. let preItemId = preResultItem.markItem.id;
  524. let preItemInput = "item" + preItemId;
  525. let order = preResultItem.markItem.orders;
  526. document.getElementById(preItemInput).focus();
  527. this.positionDiv(order);
  528. }
  529. },
  530. //键盘打分板回车后跳转下一题
  531. scoreEnter(index, resultItem) {
  532. if (!this.checkScore(resultItem)) {
  533. var curItemId = this.resultItems[index].markItem.id;
  534. var curItemInput = "item" + curItemId;
  535. document.getElementById(curItemInput).focus();
  536. return;
  537. }
  538. if (index === this.resultItems.length - 1) {
  539. document.getElementById("#subMarkBtn").focus();
  540. } else {
  541. var nextResultItem = this.resultItems[index + 1];
  542. var nextItemId = nextResultItem.markItem.id;
  543. var nextItemInput = "item" + nextItemId;
  544. var order = nextResultItem.markItem.orders;
  545. document.getElementById(nextItemInput).focus();
  546. this.positionDiv(order);
  547. }
  548. },
  549. getItemId(itemId) {
  550. return "item" + itemId;
  551. },
  552. problemClick() {
  553. this.problemView = !this.problemView;
  554. },
  555. checkItems() {
  556. var itemName = "";
  557. for (var resultItem of this.resultItems) {
  558. if (resultItem.score.length == 0) {
  559. itemName =
  560. Number.parseInt(resultItem.markItem.mainNumber) +
  561. "(" +
  562. resultItem.markItem.orders +
  563. ")";
  564. this.$notify({
  565. message: itemName + "没有打分,请打分",
  566. type: "error"
  567. });
  568. return false;
  569. } else {
  570. if (!this.checkScore(resultItem)) {
  571. return false;
  572. }
  573. }
  574. }
  575. return true;
  576. },
  577. submitMark() {
  578. if (!this.checkItems()) {
  579. return;
  580. }
  581. this.processTagPaper();
  582. this.loading = true;
  583. if (!this.markedResult.id) {
  584. console.log("提交resultItems", this.resultItems);
  585. this.$http
  586. .post(
  587. MARKING_API +
  588. "/markResults?studentPaperId=" +
  589. this.studentPaperId +
  590. "&markTaskId=" +
  591. this.markTaskId +
  592. "&tag=" +
  593. this.unusualType +
  594. "&remark=" +
  595. this.textarea,
  596. this.resultItems
  597. )
  598. .then(
  599. response => {
  600. this.saveMarkSign();
  601. console.log(response);
  602. if (response.data.id) {
  603. this.$notify({
  604. message: "提交成功",
  605. type: "success"
  606. });
  607. } else {
  608. this.$notify({
  609. message: "提交失败",
  610. type: "error"
  611. });
  612. }
  613. this.$emit("submitMark");
  614. this.loading = false;
  615. this.markTypeView = false;
  616. this.problemView = false;
  617. this.unusualType = "";
  618. //this.textarea = '';
  619. },
  620. response => {
  621. // 响应错误回调
  622. console.log(response);
  623. if (response.data.desc) {
  624. var errorInfo = response.data.desc;
  625. if (errorInfo.includes("超时")) {
  626. this.$alert(
  627. "该评卷任务已超时,请点击确定重新登录!",
  628. "提示",
  629. {
  630. confirmButtonText: "确定",
  631. callback: () => {
  632. var loginUrl = sessionStorage.getItem("loginUrl");
  633. this.$http
  634. .post(CORE_API + "/auth/logout")
  635. .then(response => {
  636. console.log(response);
  637. this.USER_SIGNOUT();
  638. sessionStorage.clear();
  639. if (loginUrl) {
  640. window.location.href = loginUrl;
  641. } else {
  642. window.location.href = "about:blank";
  643. }
  644. })
  645. .catch(response => {
  646. console.log(response);
  647. this.USER_SIGNOUT();
  648. sessionStorage.clear();
  649. if (loginUrl) {
  650. window.location.href = loginUrl;
  651. } else {
  652. window.location.href = "about:blank";
  653. }
  654. });
  655. return;
  656. }
  657. }
  658. );
  659. } else {
  660. this.$notify({
  661. message: response.data.desc,
  662. type: "error"
  663. });
  664. this.$emit("submitMark");
  665. this.loading = false;
  666. this.markTypeView = false;
  667. this.problemView = false;
  668. this.unusualType = "";
  669. //this.textarea = '';
  670. }
  671. } else {
  672. this.$notify({
  673. message: "提交失败",
  674. type: "error"
  675. });
  676. this.$emit("submitMark");
  677. this.loading = false;
  678. this.markTypeView = false;
  679. this.problemView = false;
  680. this.unusualType = "";
  681. //this.textarea = '';
  682. }
  683. }
  684. );
  685. } else {
  686. console.log("markedResult", this.markedResult);
  687. this.markedResult.resultItems = this.resultItems;
  688. this.markedResult.remark = this.textarea;
  689. this.$http.put(MARKING_API + "/markResults", this.markedResult).then(
  690. response => {
  691. this.saveMarkSign();
  692. console.log(response);
  693. this.$notify({
  694. message: "提交成功",
  695. type: "success"
  696. });
  697. this.$emit("submitMark");
  698. this.loading = false;
  699. this.markTypeView = false;
  700. this.problemView = false;
  701. this.unusualType = "";
  702. //this.textarea = '';
  703. },
  704. response => {
  705. // 响应错误回调
  706. console.log(response);
  707. if (response.data.desc) {
  708. this.$notify({
  709. message: response.data.desc,
  710. type: "error"
  711. });
  712. } else {
  713. this.$notify({
  714. message: "提交失败",
  715. type: "error"
  716. });
  717. }
  718. this.$emit("submitMark");
  719. this.loading = false;
  720. this.markTypeView = false;
  721. this.problemView = false;
  722. this.unusualType = "";
  723. //this.textarea = '';
  724. }
  725. );
  726. }
  727. },
  728. initKeyBoardMode() {
  729. var itemId = this.resultItems[0].markItem.id;
  730. var order = this.resultItems[0].markItem.orders;
  731. var itemInput = "item" + itemId;
  732. setTimeout(function() {
  733. document.getElementById(itemInput).focus();
  734. }, 1);
  735. this.positionDiv(order);
  736. }
  737. },
  738. watch: {
  739. signItem(val) {
  740. this.tmpSignItem = val;
  741. },
  742. tmpSignItem(val) {
  743. this.$emit("changeSign", val);
  744. },
  745. isMouseMode(val) {
  746. if (!val) {
  747. this.initKeyBoardMode();
  748. }
  749. },
  750. studentPaperId() {
  751. if (!this.isMouseMode) {
  752. this.initKeyBoardMode();
  753. }
  754. },
  755. markRemarkInfo() {
  756. this.textarea = "";
  757. if (this.markedResult.id) {
  758. this.textarea = this.markedResult.markRemark;
  759. }
  760. }
  761. },
  762. computed: {
  763. tagFlag() {
  764. if (this.markedResult.id) {
  765. return true;
  766. } else {
  767. return false;
  768. }
  769. },
  770. paperKey() {
  771. if (!this.markSign) return "";
  772. return this.studentPaperId;
  773. },
  774. signScoreSum() {
  775. var sum = 0;
  776. for (let signScore of this.signScores) {
  777. sum += signScore;
  778. }
  779. return sum;
  780. },
  781. itemClass() {
  782. var itemClass = [];
  783. for (let resultItem of this.resultItems) {
  784. if (resultItem.score.length == 0) {
  785. itemClass.push(false);
  786. } else {
  787. itemClass.push(true);
  788. }
  789. }
  790. return itemClass;
  791. },
  792. totalScore() {
  793. var totalScore = 0;
  794. for (let resultItem of this.resultItems) {
  795. if (resultItem.score.length == 0) {
  796. totalScore += 0;
  797. } else {
  798. totalScore += Number.parseFloat(resultItem.score);
  799. }
  800. }
  801. return totalScore;
  802. },
  803. itemScores() {
  804. var itemScores = [];
  805. var scoreInterval = this.resultItem.markItem.scoreInterval;
  806. for (
  807. let i = 0, j = 0;
  808. i <= this.resultItem.markItem.maxScore;
  809. i += scoreInterval, j++
  810. ) {
  811. itemScores[j] = i;
  812. }
  813. return itemScores;
  814. },
  815. ...mapState({ user: state => state.user })
  816. },
  817. created() {
  818. this.getTags();
  819. this.markRemarkInfo();
  820. }
  821. };
  822. </script>