|
|
@@ -1,17 +1,30 @@
|
|
|
<template>
|
|
|
<card-judge-item :success="pass">
|
|
|
<div class="result-section">
|
|
|
- <strong>{{ checkResultItem.content }}</strong>
|
|
|
+ <div class="line-container">
|
|
|
+ <strong style="flex-grow: 1">
|
|
|
+ <b-tooltip :label="checkResultItem.explain" position="is-top">
|
|
|
+ {{ checkResultItem.content }}
|
|
|
+ </b-tooltip>
|
|
|
+ </strong>
|
|
|
+ <div @click="selectReviewingTarget" class="image-container">
|
|
|
+ <img
|
|
|
+ style="width: 20px;height: 20px"
|
|
|
+ alt=""
|
|
|
+ src="../../assets/icon/edit-dark.png"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
<div
|
|
|
- :class="{ 'group-line--hover': !result.isArgued }"
|
|
|
+ :class="{ 'group-line--hover': !result.isArgued && !canBeReviewed }"
|
|
|
class="group-line"
|
|
|
v-for="result in checkResultItem.results"
|
|
|
:key="result.rid"
|
|
|
@click="argue(result)"
|
|
|
>
|
|
|
- <strong style="padding-right:10px;color:grey"
|
|
|
- >+ id:{{ result.groupId + "\t" }}</strong
|
|
|
- >
|
|
|
+ <strong style="padding-right:10px;color:grey">
|
|
|
+ + id:{{ result.groupId + "\t" }}
|
|
|
+ </strong>
|
|
|
<span class="state state-success" v-if="result.level">PASS</span>
|
|
|
<span class="state state-error" v-else>ERROR</span>
|
|
|
<span class="comments">{{ result.comment }}</span>
|
|
|
@@ -20,9 +33,47 @@
|
|
|
type="is-warning"
|
|
|
class="state"
|
|
|
style="margin-left: 10px;"
|
|
|
- >已申请
|
|
|
+ >
|
|
|
+ 已申请
|
|
|
</b-tag>
|
|
|
</div>
|
|
|
+ <div
|
|
|
+ v-if="checkResultItem.hasTeacherReview && !isReviewing"
|
|
|
+ :class="{ 'group-line--hover': canBeReviewed }"
|
|
|
+ @click="selectReviewingTarget"
|
|
|
+ class="group-line"
|
|
|
+ >
|
|
|
+ <strong style="padding-right:10px;color:grey">「老师评价」</strong>
|
|
|
+ <span class="state state-success" v-if="checkResultItem.teacherLevel">
|
|
|
+ PASS
|
|
|
+ </span>
|
|
|
+ <span class="state state-error" v-else>ERROR</span>
|
|
|
+ <span class="comments">{{ checkResultItem.teacherComment }}</span>
|
|
|
+ </div>
|
|
|
+ <div v-else>
|
|
|
+ <div class="line-container">
|
|
|
+ <b-checkbox
|
|
|
+ class="checkbox-section"
|
|
|
+ v-model="reviewLevel"
|
|
|
+ type="is-primary"
|
|
|
+ >
|
|
|
+ 是否满足条件
|
|
|
+ </b-checkbox>
|
|
|
+ <a
|
|
|
+ class="button is-small is-primary"
|
|
|
+ :class="{ 'is-loading': submitLoading }"
|
|
|
+ @click="submitReviewResult"
|
|
|
+ >
|
|
|
+ 提交
|
|
|
+ </a>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <b-input
|
|
|
+ placeholder="请输入评价"
|
|
|
+ v-model="reviewComment"
|
|
|
+ type="textarea"
|
|
|
+ ></b-input>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
|
|
|
<b-modal :active.sync="showModal" :width="400">
|
|
|
@@ -60,6 +111,14 @@ export default {
|
|
|
arguable: {
|
|
|
type: Boolean,
|
|
|
default: false
|
|
|
+ },
|
|
|
+ canBeReviewed: {
|
|
|
+ type: Boolean,
|
|
|
+ default: false
|
|
|
+ },
|
|
|
+ isReviewing: {
|
|
|
+ type: Boolean,
|
|
|
+ default: false
|
|
|
}
|
|
|
},
|
|
|
data() {
|
|
|
@@ -67,16 +126,26 @@ export default {
|
|
|
selectedResult: {},
|
|
|
showModal: false,
|
|
|
remark: "",
|
|
|
- submitLoading: false
|
|
|
+ submitLoading: false,
|
|
|
+ reviewLevel: this.checkResultItem.teacherLevel,
|
|
|
+ reviewComment: this.checkResultItem.teacherComment || ""
|
|
|
};
|
|
|
},
|
|
|
computed: {
|
|
|
pass() {
|
|
|
const { results = [] } = this.checkResultItem;
|
|
|
+ if (this.checkResultItem.hasTeacherReview) {
|
|
|
+ return this.checkResultItem.teacherLevel;
|
|
|
+ }
|
|
|
return results.filter(result => result.level === false).length === 0;
|
|
|
}
|
|
|
},
|
|
|
methods: {
|
|
|
+ selectReviewingTarget() {
|
|
|
+ if (this.canBeReviewed) {
|
|
|
+ this.$emit("review-item", this.checkResultItem.id);
|
|
|
+ }
|
|
|
+ },
|
|
|
argue(result) {
|
|
|
if (this.arguable && !result.isArgued) {
|
|
|
this.selectedResult = result;
|
|
|
@@ -93,6 +162,15 @@ export default {
|
|
|
this.submitLoading = false;
|
|
|
this.showModal = false;
|
|
|
this.remark = "";
|
|
|
+ },
|
|
|
+ async submitReviewResult() {
|
|
|
+ this.submitLoading = true;
|
|
|
+ await this.$emit("review-teacher", {
|
|
|
+ id: this.checkResultItem.id,
|
|
|
+ level: this.reviewLevel,
|
|
|
+ comment: this.reviewComment
|
|
|
+ });
|
|
|
+ this.submitLoading = false;
|
|
|
}
|
|
|
}
|
|
|
};
|
|
|
@@ -100,6 +178,10 @@ export default {
|
|
|
|
|
|
<style lang="scss" scoped>
|
|
|
@import "../../assets/scss/app";
|
|
|
+.checkbox-section {
|
|
|
+ padding: $default-margin 0;
|
|
|
+}
|
|
|
+
|
|
|
.result-section {
|
|
|
padding: $default-margin;
|
|
|
border-bottom: 1px solid rgba(0, 0, 0, 0.12);
|
|
|
@@ -110,6 +192,12 @@ export default {
|
|
|
border-radius: $default-radius;
|
|
|
}
|
|
|
|
|
|
+.line-container {
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ align-items: center;
|
|
|
+}
|
|
|
+
|
|
|
.state {
|
|
|
padding: 2px 5px;
|
|
|
font-weight: bold;
|
|
|
@@ -131,6 +219,16 @@ export default {
|
|
|
font-size: 14px;
|
|
|
}
|
|
|
|
|
|
+.image-container {
|
|
|
+ border-radius: 2px;
|
|
|
+ height: 20px;
|
|
|
+ cursor: pointer;
|
|
|
+}
|
|
|
+
|
|
|
+.image-container:hover {
|
|
|
+ background-color: #f6f5fa;
|
|
|
+}
|
|
|
+
|
|
|
.group-line {
|
|
|
padding: 2px 0;
|
|
|
border-radius: $default-radius;
|