123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727 |
- <style scoped>
- .el-select {
- width: 160px;
- }
- .content {
- margin-top: 10px;
- }
- small {
- font-size: 18px;
- font-weight: bold;
- margin-left: 10px;
- margin-top: 20px;
- }
- .content-header {
- margin-top: 10px;
- }
- section {
- margin-top: 10px;
- margin-bottom: 20px;
- }
- .box-body {
- height: 100%;
- width: 100%;
- }
- .backcolor {
- background-color: #ecf0f5;
- }
- li {
- list-style-type: none;
- }
- .marktitle {
- margin-right: 10px;
- margin-bottom: 10px;
- }
- .titlefont {
- font-size: 15px;
- }
- .box-card {
- width: 200px;
- height: 120px;
- }
- .block {
- display: inline-block;
- }
- .text {
- text-align: center;
- }
- .markcount {
- margin-right: 10px;
- }
- .scroll {
- overflow: auto;
- height: 450px;
- }
- .reject {
- color: red;
- }
- .marksign {
- margin-left: 20px;
- }
- </style>
- <template>
- <div v-loading="loading" element-loading-text="拼命加载中">
- <section class="content-header">
- <span>
- <span class="pull-left">
- <small class="marktitle">
- <span class="label-danger">{{ mark_type }}</span>
- </small>
- <small class="marktitle titlefont">
- <span>课程:{{ task.courseName }}</span>
- </small>
- <small class="marktitle titlefont">
- <span>试卷编号:{{ task.paperName }}</span>
- </small>
- <small class="marktitle">
- <el-button-group>
- <el-button size="small"
- ><span class="titlefont">已评</span></el-button
- >
- <el-button size="small" @click="markedClick"
- ><span class="titlefont">{{
- task.markedCount
- }}</span></el-button
- >
- </el-button-group>
- </small>
- <small class="marktitle">
- <el-button-group>
- <el-button size="small"
- ><span class="titlefont">待评</span></el-button
- >
- <el-button size="small"
- ><span class="titlefont">{{ task.leftCount }}</span></el-button
- >
- </el-button-group>
- </small>
- <small class="marktitle">
- <el-button-group>
- <el-button size="small"
- ><span class="titlefont">进度</span></el-button
- >
- <el-button size="small"
- ><span class="titlefont"
- >{{
- (
- ((task.totalCount - task.leftCount) * 100) /
- task.totalCount
- ).toFixed(2)
- }}%</span
- ></el-button
- >
- </el-button-group>
- </small>
- <small class="marktitle">
- <el-button type="primary" @click="taskChange" size="small">
- <span class="titlefont"
- >切换任务 <i class="el-icon-caret-bottom el-icon--right"></i>
- </span>
- </el-button>
- </small>
- <small class="marktitle">
- <el-button-group>
- <el-button size="small"
- ><span class="titlefont"><i class="fa fa-user"></i></span
- ></el-button>
- <el-button size="small"
- ><span class="titlefont">{{
- user.displayName
- }}</span></el-button
- >
- </el-button-group>
- </small>
- <small class="marktitle titlefont marksign">
- <el-button type="success" @click="backIndex" size="small">
- <i class="fa fa-sign-out"></i>
- <span class="titlefont">退回 </span>
- </el-button>
- </small>
- <el-dialog title="切换任务" :visible.sync="taskVisible" size="large">
- <div class="scroll">
- <el-form
- :inline="true"
- :model="taskFormSearch"
- label-position="right"
- label-width="70px"
- >
- <el-form-item label="课程代码" class="pull-left">
- <el-input
- placeholder="课程代码"
- v-model="taskFormSearch.courseCode"
- ></el-input>
- </el-form-item>
- <el-form-item label="课程名称" class="pull-left">
- <el-input
- placeholder="课程名称"
- v-model="taskFormSearch.courseName"
- ></el-input>
- </el-form-item>
- <el-form-item class="pull-right">
- <el-button
- type="primary"
- icon="search"
- @click="getChangeTasks"
- >查询</el-button
- >
- </el-form-item>
- </el-form>
- <el-table :data="changeTasks" border style="width: 100%">
- <el-table-column
- label="课程代码"
- width="250"
- prop="courseCode"
- />
- <el-table-column
- label="课程名称"
- width="200"
- prop="courseName"
- />
- <el-table-column
- label="任务"
- width="200"
- prop="markRangeName"
- />
- <el-table-column label="已评" prop="markedCount" />
- <el-table-column label="待评" prop="leftCount" />
- <el-table-column :context="_self" label="操作">
- <template slot-scope="scope">
- <div>
- <el-button
- size="small"
- type="success"
- @click="tasksSelect(scope.$index, scope.row);"
- >
- 选择
- </el-button>
- </div>
- </template>
- </el-table-column>
- </el-table>
- <div class="page pull-right">
- <el-pagination
- background
- @current-change="taskCurrentChange"
- :current-page="taskCurrentPage"
- :page-size="pageSize"
- layout="total, prev, pager, next, jumper"
- :total="changeTaskTotal"
- >
- </el-pagination>
- </div>
- </div>
- </el-dialog>
- <el-dialog
- title="已评任务"
- :visible.sync="markedTaskVisible"
- size="large"
- >
- <div class="scroll">
- <el-form
- :inline="true"
- :model="markTaskFormSearch"
- label-position="right"
- label-width="70px"
- >
- </el-form>
- <el-table :data="markedResults" border style="width: 100%">
- <el-table-column
- label="答卷Id"
- width="100"
- prop="studentPaperId"
- />
- <el-table-column label="得分" prop="score" />
- <el-table-column label="评阅时间">
- <template slot-scope="scope">
- <div>
- <span style="margin-left: 10px">{{
- dateFormatter(scope.row)
- }}</span>
- </div>
- </template>
- </el-table-column>
- <el-table-column label="状态">
- <div><span style="margin-left: 10px">已评</span></div>
- </el-table-column>
- <el-table-column label="问题卷">
- <template slot-scope="scope">
- <div>
- <span style="margin-left: 10px">{{
- getTagName(scope.row.tag)
- }}</span>
- </div>
- </template>
- </el-table-column>
- <el-table-column label="评卷备注">
- <template slot-scope="scope">
- <div>
- <span style="margin-left: 10px">{{
- scope.row.markRemark
- }}</span>
- </div>
- </template>
- </el-table-column>
- <el-table-column :context="_self" label="操作">
- <template slot-scope="scope">
- <div>
- <el-button
- size="small"
- type="success"
- @click="markTaskSelect(scope.$index, scope.row);"
- >
- 选择
- </el-button>
- </div>
- </template>
- </el-table-column>
- </el-table>
- <div class="page pull-right">
- <el-pagination
- background
- @current-change="markedCurrentChange"
- :current-page="markedCurrentPage"
- :page-size="pageSize"
- layout="total, prev, pager, next, jumper"
- :total="markedTotal"
- >
- </el-pagination>
- </div>
- </div>
- </el-dialog>
- </span>
- </span>
- </section>
- <section class="content">
- <div class="box box-info backcolor">
- <div class="box-body">
- <!-- 文本图片阅卷主界面 -->
- <tpMain
- @changePaperSign="changePaperSign"
- @clearScores="clearScores"
- @changeSignScores="changeSignScores"
- :paperMarkSign="paperMarkSign"
- :signItem="signItem"
- :signScores="signScores"
- :signOption="signOption"
- :markSign="markSign"
- :studentPaper="studentPaper"
- :examType="examType"
- ></tpMain>
- <!-- 文本图片给分板 -->
- <tpScoreboard
- @submitMark="getNext"
- @changeSign="changeSign"
- :paperMarkSign="paperMarkSign"
- :signItem="signItem"
- :signScores="signScores"
- :signOption="signOption"
- :markSign="markSign"
- :paperMark="paperMark"
- :markedResult="markedResult"
- :resultItems="resultItems"
- :studentPaperId="studentPaper.id"
- :markTaskId="task.id"
- ></tpScoreboard>
- </div>
- </div>
- </section>
- </div>
- </template>
- <script>
- import { mapState } from "vuex";
- import TpMain from "./TpMain.vue";
- import TpScoreBoard from "./TpScoreBoard.vue";
- import { MARKING_API, DATA_PROCESS_API } from "../constants/constants";
- export default {
- components: {
- tpMain: TpMain,
- tpScoreboard: TpScoreBoard
- },
- data() {
- return {
- markSign: false,
- paperMarkSign: [],
- signScores: [],
- signItem: {},
- signOption: { score: 0, data: "", width: 800, height: 8000, loc: [] },
- tasks: [],
- task: {},
- changeTasks: [],
- changeTaskTotal: 0,
- studentPaper: {},
- markRange: {},
- resultItems: [],
- markedResults: [],
- markedResult: {},
- loading: true,
- taskCurrentPage: 1,
- taskTotal: 0,
- markedCurrentPage: 1,
- markedTotal: 0,
- pageSize: 10,
- mark_type: "正评",
- mark_task: {},
- taskVisible: false,
- markedTaskVisible: false,
- problemTaskVisible: false,
- degree: [{ label: "是", value: "Y" }, { label: "否", value: "N" }],
- markTaskFormSearch: {
- courseCode: "",
- courseName: "",
- degree: ""
- },
- taskFormSearch: {
- courseCode: "",
- courseName: "",
- paperCode: ""
- },
- course: {},
- workId: "",
- examType: "",
- markSearch: {
- userId: "",
- workId: ""
- },
- //回评标志
- backMark: false,
- //获取试卷标志(成功获取true,没有试卷false)
- paperMark: true,
- tags: []
- };
- },
- methods: {
- getTags() {
- this.$http.get(MARKING_API + "/markResults/tag").then(response => {
- this.tags = response.data;
- });
- },
- getTagName(code) {
- for (let tag of this.tags) {
- if (tag.code === code) {
- return tag.name;
- }
- }
- },
- clearScores() {
- this.signScores.splice(0, this.signScores.length);
- },
- changePaperSign(val) {
- this.paperMarkSign = val;
- },
- changeSignScores(val) {
- this.signScores = val;
- },
- changeSign(val) {
- console.log(val);
- this.signItem = val;
- },
- taskChange() {
- this.taskVisible = true;
- this.getChangeTasks();
- },
- async tasksSelect(index, row) {
- await this.initMarkItem();
- await this.markInit();
- this.task = row;
- await this.getPaper();
- await this.getMarkRange();
- await this.getMarkedTask();
- this.taskVisible = false;
- },
- markedClick() {
- this.markedTaskVisible = true;
- this.getMarkedTask();
- },
- problemClick() {
- this.problemTaskVisible = true;
- },
- backIndex() {
- this.$router.push({ path: "/marking/mark_setting_work/marking" });
- },
- taskCurrentChange(val) {
- this.taskCurrentPage = val;
- this.getChangeTasks();
- },
- markedCurrentChange(val) {
- this.markedCurrentPage = val;
- this.getMarkedTask();
- },
- markTaskSelect(index, row) {
- this.backMark = true;
- this.paperMark = true;
- this.textarea = row.markRemark;
- this.getMarkedPaper(row.studentPaperId);
- this.getMarkedResultItems(row.id);
- this.markedTaskVisible = false;
- },
- async markInit() {
- console.log("markInit");
- var self = this;
- this.workId = this.$route.params.workId;
- this.examType = this.$route.params.examType;
- var userId = this.user.userId;
- await self.$http
- .get(
- DATA_PROCESS_API +
- "/markTasks?workId=" +
- self.workId +
- "&userId=" +
- userId
- )
- .then(response => {
- self.tasks = response.data;
- self.taskTotal = self.tasks.length;
- //切换任务提交试卷后,继续维持该任务
- if (self.changeTaskCur != self.taskCur) {
- //切换任务评完后,继续跳转原来的任务
- if (self.tasks[self.changeTaskCur].leftCount == 0) {
- if (self.tasks[self.taskCur]) {
- self.task = self.tasks[self.taskCur];
- }
- } else if (self.tasks[self.changeTaskCur]) {
- self.task = self.tasks[self.changeTaskCur];
- }
- } else {
- if (self.tasks[self.taskCur]) {
- self.task = self.tasks[self.taskCur];
- }
- }
- console.log("tasks", self.tasks);
- });
- },
- async getChangeTasks() {
- console.log("getChangeTasks");
- var self = this;
- this.workId = this.$route.params.workId;
- var userId = this.user.userId;
- await self.$http
- .get(
- DATA_PROCESS_API +
- "/markTasks?workId=" +
- self.workId +
- "&userId=" +
- userId
- )
- .then(response => {
- self.changeTasks = response.data;
- self.changeTaskTotal = self.changeTasks.length;
- self.filterChangeTasks();
- self.pagingChangeTasks();
- console.log("changeTasks", self.changeTasks);
- });
- },
- filterChangeTasks() {
- var tempData = this.changeTasks.filter(element => {
- var flag = true;
- if (this.taskFormSearch.courseCode || this.taskFormSearch.courseName) {
- if (this.taskFormSearch.courseCode) {
- flag =
- flag &&
- element.courseCode.includes(this.taskFormSearch.courseCode);
- }
- if (this.taskFormSearch.courseName) {
- flag =
- flag &&
- element.courseName.includes(this.taskFormSearch.courseName);
- }
- return flag;
- } else {
- return flag;
- }
- });
- this.changeTasks = tempData;
- this.changeTaskTotal = tempData.length;
- },
- pagingChangeTasks() {
- var start = (this.taskCurrentPage - 1) * this.pageSize;
- var end =
- this.taskCurrentPage * this.pageSize < this.changeTaskTotal
- ? this.taskCurrentPage * this.pageSize
- : this.changeTaskTotal;
- var tempData = [];
- console.log(`当前页: ${this.taskCurrentPage},开始:${start},结束:${end}`);
- for (let i = start; i < end; i++) {
- tempData.push(this.changeTasks[i]);
- }
- this.changeTasks = tempData;
- },
- async getPaper() {
- console.log("getPaper");
- var self = this;
- await self.$http
- .get(
- DATA_PROCESS_API +
- "/studentPapers?markTaskId=" +
- self.task.id +
- "&examType=" +
- self.examType
- )
- .then(response => {
- if (!response) {
- self.$notify({
- message: "该任务下试卷已评完,如有剩余任务将自动切换任务",
- type: "info"
- });
- self.studentPaper = { id: "" };
- self.paperMark = false;
- return false;
- } else {
- self.studentPaper = response.data;
- self.paperMark = true;
- console.log("paper", self.studentPaper);
- }
- });
- return true;
- },
- async getMarkedTask() {
- console.log("getMarkedTask");
- var self = this;
- await self.$http
- .get(
- MARKING_API +
- "/markResults/" +
- this.task.id +
- "/" +
- this.markedCurrentPage +
- "/" +
- this.pageSize
- )
- .then(response => {
- self.markedResults = response.data.data;
- self.markedTotal = response.data.pageInfo.totalElements;
- self.markedCurrentPage = response.data.pageInfo.page + 1;
- console.log("markedTask", self.markedResults);
- });
- },
- async getMarkedPaper(studentPaperId) {
- var self = this;
- await self.$http
- .get(
- DATA_PROCESS_API +
- "/studentPapers/" +
- studentPaperId +
- "/" +
- this.examType
- )
- .then(response => {
- self.studentPaper = response.data;
- });
- },
- async getMarkedResultItems(markResultId) {
- var self = this;
- await self.$http
- .get(MARKING_API + "/markResults/" + markResultId)
- .then(response => {
- self.resultItems = response.data.resultItems;
- self.markedResult = response.data;
- console.log(self.markedResult);
- });
- },
- async getMarkRange() {
- console.log("getMarkRange");
- if (!this.paperMark) {
- return;
- }
- var self = this;
- await self.$http
- .get(MARKING_API + "/markRanges/" + self.task.markRangeId)
- .then(response => {
- self.markRange = response.data;
- self.getResultItems(self.markRange);
- console.log("markRange", self.markRange);
- console.log("resultItems", self.resultItems);
- });
- },
- getResultItems(markRange) {
- for (let markItem of markRange.markItems) {
- var resultItem = { markItem: markItem, score: "" };
- this.resultItems.push(resultItem);
- }
- },
- async getNext() {
- //试卷全部评完且回评时不继续获取试卷
- if (this.backMark && this.allMarked) {
- return;
- }
- this.initMarkItem();
- await this.markInit();
- await this.getPaper();
- await this.getChangeTasks();
- await this.getMarkRange();
- await this.getMarkedTask();
- this.backMark = false;
- },
- dateFormatter(row) {
- var fulldate = new Date(row.markedOn);
- var year = fulldate.getFullYear();
- var month = fulldate.getMonth() + 1;
- var date = fulldate.getDate();
- var formatDate = [year, month, date].join("-");
- return formatDate;
- },
- initMarkItem() {
- this.resultItems.splice(0, this.resultItems.length);
- this.markResult = {};
- this.markedResult = {};
- },
- markSignChange() {
- if (this.markSign) {
- this.$message({
- showClose: true,
- message: "轨迹模式已开启,只支持鼠标操作",
- type: "warning"
- });
- }
- }
- },
- computed: {
- allMarked() {
- if (this.tasks.length == 0) {
- return false;
- } else {
- for (let task of this.tasks) {
- if (task.leftCount > 0) {
- return false;
- }
- }
- return true;
- }
- },
- taskCur() {
- //任务及时动态切换
- if (this.tasks.length == 0) {
- return 0;
- } else {
- for (let [index, task] of this.tasks.entries()) {
- if (task.leftCount > 0) {
- return index;
- }
- }
- return 0;
- }
- },
- changeTaskCur() {
- for (let [index, task] of this.tasks.entries()) {
- if (task.id == this.task.id) {
- return index;
- }
- }
- return this.taskCur;
- },
- ...mapState({ user: state => state.user })
- },
- async created() {
- this.loading = true;
- await this.markInit();
- await this.getChangeTasks();
- await this.getPaper();
- await this.getMarkRange();
- await this.getMarkedTask();
- this.getTags();
- this.loading = false;
- }
- };
- </script>
|