Browse Source

科组长分组调整

zhangjie 3 năm trước cách đây
mục cha
commit
a6a0804348

+ 18 - 0
src/api.js

@@ -206,10 +206,17 @@ export const deleteGradingGroup = (subjectId, groupId) => {
 export const markUserList = ({ workId, subjectId }) => {
   return $get("/api/markers", { workId, subject: subjectId });
 };
+export const userGroupList = ({ workId, subject }) => {
+  // workId=&subject=&stage=  stage非必填
+  return $get("/api/admin/users/list_group", { workId, subject });
+};
 // grading-progress
 export const gradingProgressDetail = ({ workId, subject }) => {
   return $get("/api/markers/stat/progress", { workId, subject });
 };
+export const markLeaderGradingProgressDetail = ({ workId, subject }) => {
+  return $get("/api/markers/mark_leader/stat/progress", { workId, subject });
+};
 export const areaStatProgress = subjectId => {
   return $get(`/api/marksubjects/${subjectId}/areaProgress`);
 };
@@ -268,6 +275,7 @@ export const cancelStandardPaper = paperIds => {
 export const gradingStatData = datas => {
   return $get("/api/marktasks/levelStatDetail", datas);
 };
+
 // level relate
 export const workLevelList = workId => {
   return $get(`/api/admin/works/${workId}/levels`);
@@ -278,6 +286,16 @@ export const levelStatData = (subjectId, questionId) => {
 export const scoreStatData = (subjectId, questionId) => {
   return $get(`/api/marksubjects/${subjectId}/stat/scores`, { questionId });
 };
+export const markLeaderLevelStatData = (subjectId, questionId) => {
+  return $get(`/api/marksubjects/${subjectId}/mark_leader/stat/levels`, {
+    questionId
+  });
+};
+export const markLeaderScoreStatData = (subjectId, questionId) => {
+  return $get(`/api/marksubjects/${subjectId}/mark_leader/stat/scores`, {
+    questionId
+  });
+};
 export const markerLevelStatData = (userId, questionId) => {
   return $get(`/api/markers/${userId}/stat/levels`, { questionId });
 };

+ 6 - 0
src/assets/styles/mark.less

@@ -126,9 +126,15 @@
   .progress-line {
     width: 230px;
   }
+  .kzz-table {
+    margin-bottom: 10px;
+    padding-bottom: 10px;
+    border-bottom: 1px dashed #e1dfe0;
+  }
   td:first-child {
     font-weight: 600;
     color: @dark-color;
+    width: 100px;
   }
 }
 // progress-line

+ 4 - 0
src/assets/styles/marker.less

@@ -674,6 +674,10 @@
       color: @color-text-act;
     }
   }
+
+  &-part {
+    margin-bottom: 20px;
+  }
 }
 // modify-leader-grading
 .marker-modal {

+ 47 - 38
src/modules/grading/GradingProgress.vue

@@ -60,43 +60,49 @@
       </Col>
       <Col span="12">
         <div class="part-box progress-table">
-          <table
-            class="table table-noborder"
-            v-if="IS_LEVEL && markerProgress.length"
-          >
-            <tr>
-              <td>{{ kzzInfo.loginName }}</td>
-              <td colspan="3" style="text-align:left">
-                仲裁:{{ kzzInfo.arbitrated }}
-              </td>
-            </tr>
-            <tr v-for="(item, aindex) in markerProgress" :key="aindex">
-              <td>{{ item.loginName }}</td>
-              <td>
-                <progress-line
-                  :sum="item.totalCount"
-                  :current="item.successCount"
-                ></progress-line>
-              </td>
-              <td>进度:{{ item.progress }}%</td>
-              <td>打回:{{ item.rejectedCount }}</td>
+          <table class="table table-noborder kzz-table" v-if="kzzInfo.length">
+            <tr v-for="kzz in kzzInfo" :key="kzz.loginName">
+              <td>{{ kzz.loginName }}</td>
+              <td style="text-align:left">仲裁:{{ kzz.arbitrated }}</td>
             </tr>
           </table>
 
-          <table class="table table-noborder" v-if="IS_SCORE">
-            <tr v-for="(item, aindex) in markerProgress" :key="aindex">
-              <td>{{ item.loginName }}</td>
-              <td>
-                <progress-line
-                  :sum="item.totalCount"
-                  :current="item.successCount"
-                ></progress-line>
-              </td>
-              <td>进度:{{ item.progress }}%</td>
-              <td>改档:{{ item.shiftCount }}</td>
-              <td>改档打分:{{ item.shiftScoreCount }}</td>
-            </tr>
-          </table>
+          <div v-for="(group, index) in groupMarkers" :key="index">
+            <table v-if="IS_LEVEL" class="table table-noborder kzz-table">
+              <tr v-for="kzz in group.kzzProgress" :key="kzz.loginName">
+                <td>{{ kzz.loginName }}</td>
+                <td colspan="3" style="text-align:left">
+                  仲裁:{{ kzz.arbitrated }}
+                </td>
+              </tr>
+              <tr v-for="(item, aindex) in group.markerProgress" :key="aindex">
+                <td>{{ item.loginName }}</td>
+                <td>
+                  <progress-line
+                    :sum="item.totalCount"
+                    :current="item.successCount"
+                  ></progress-line>
+                </td>
+                <td>进度:{{ item.progress }}%</td>
+                <td>打回:{{ item.rejectedCount }}</td>
+              </tr>
+            </table>
+
+            <table v-if="IS_SCORE" class="table table-noborder kzz-table">
+              <tr v-for="(item, aindex) in group.markerProgress" :key="aindex">
+                <td>{{ item.loginName }}</td>
+                <td>
+                  <progress-line
+                    :sum="item.totalCount"
+                    :current="item.successCount"
+                  ></progress-line>
+                </td>
+                <td>进度:{{ item.progress }}%</td>
+                <td>改档:{{ item.shiftCount }}</td>
+                <td>改档打分:{{ item.shiftScoreCount }}</td>
+              </tr>
+            </table>
+          </div>
         </div>
       </Col>
     </Row>
@@ -151,10 +157,10 @@ export default {
       paramsSet: {},
       curSubject: {},
       SUBJECT_STAGE,
-      kzzInfo: {},
+      kzzInfo: [],
       totalProgress: {},
       areaProgress: [],
-      markerProgress: [],
+      groupMarkers: [],
       curUserRoleType: ""
     };
   },
@@ -238,10 +244,13 @@ export default {
       };
       if (this.curSubject.stage === "INIT") {
         this.areaProgress = [totalInfo];
-        this.markerProgress = [];
+        this.groupMarkers = [];
       } else {
         this.areaProgress = [totalInfo, ...this.addProgress(data.areaProgress)];
-        this.markerProgress = this.addProgress(data.markerProgress);
+        this.groupMarkers = data.groupMarkers.map(group => {
+          group.markerProgress = this.addProgress(group.markerProgress);
+          return group;
+        });
       }
       this.$parent.setProgress(data.totalProgress.progress);
     },

+ 5 - 2
src/modules/grading/leader/LeaderGrading.vue

@@ -158,7 +158,7 @@ import ModifyLeaderGrading from "../components/ModifyLeaderGrading";
 
 import {
   paperList,
-  levelStatData,
+  markLeaderLevelStatData,
   workLevelList,
   taskSnSearch,
   subjectDetail,
@@ -300,7 +300,10 @@ export default {
       this.selectPaper(this.curPaperIndex);
     },
     async getStepLevels() {
-      const data = await levelStatData(this.subjectId, this.filter.questionId);
+      const data = await markLeaderLevelStatData(
+        this.subjectId,
+        this.filter.questionId
+      );
       const undoIndex = data.findIndex(item => item.id === null);
       let otherStep = [];
       let undo = {

+ 88 - 62
src/modules/grading/leader/LeaderProgress.vue

@@ -34,71 +34,94 @@
       </table>
     </div>
 
-    <div class="leader-progress-part">
-      <div v-if="IS_LEVEL" colspan="3" style="text-align:left">
-        仲裁:{{ kzzInfo.arbitrated }}
-      </div>
-      <table class="table table-dark" v-if="IS_LEVEL && markerProgress.length">
-        <colgroup>
-          <col width="120" />
-          <col width="310" />
-          <col width="60" />
-          <col width="80" />
-        </colgroup>
-        <tr>
-          <th>评卷员</th>
-          <th>进度</th>
-          <th></th>
-          <th>打回</th>
-        </tr>
-        <tr v-for="(item, aindex) in markerProgress" :key="aindex">
-          <td>{{ item.loginName }}</td>
-          <td>
-            <progress-line
-              :sum="item.totalCount"
-              :current="item.successCount"
-            ></progress-line>
-          </td>
-          <td class="td-nopad">{{ item.progress }}%</td>
-          <td>{{ item.rejectedCount }}</td>
+    <div v-if="kzzInfo.length" class="leader-progress-part">
+      <table class="table table-dark">
+        <tr v-for="(user, uindex) in kzzInfo" :key="uindex">
+          <td>科组长</td>
+          <td>{{ user.loginName }}</td>
+          <td>仲裁</td>
+          <td>{{ user.arbitrated }}</td>
         </tr>
       </table>
+    </div>
 
-      <table class="table table-dark" v-if="IS_SCORE">
-        <colgroup>
-          <col width="120" />
-          <col width="210" />
-          <col width="60" />
-          <col width="80" />
-          <col width="100" />
-        </colgroup>
-        <tr>
-          <th>评卷员</th>
-          <th>进度</th>
-          <th></th>
-          <th>改档</th>
-          <th>改档打分</th>
-        </tr>
-        <tr v-for="(item, aindex) in markerProgress" :key="aindex">
-          <td>{{ item.loginName }}</td>
-          <td>
-            <progress-line
-              :sum="item.totalCount"
-              :current="item.successCount"
-            ></progress-line>
-          </td>
-          <td class="td-nopad">{{ item.progress }}%</td>
-          <td>{{ item.shiftCount }}</td>
-          <td>{{ item.shiftScoreCount }}</td>
-        </tr>
-      </table>
+    <div
+      v-for="(group, index) in groupMarkers"
+      :key="index"
+      class="leader-progress-part"
+    >
+      <div v-if="IS_LEVEL">
+        <div v-for="(kzz, kindex) in group.kzzProgress" :key="kindex">
+          科组长:{{ kzz.loginName }},仲裁:{{ kzz.arbitrated }}
+        </div>
+        <table class="table table-dark">
+          <colgroup>
+            <col width="120" />
+            <col width="310" />
+            <col width="60" />
+            <col width="80" />
+          </colgroup>
+          <tr>
+            <th>评卷员</th>
+            <th>进度</th>
+            <th></th>
+            <th>打回</th>
+          </tr>
+          <tr v-for="(item, aindex) in group.markerProgress" :key="aindex">
+            <td>{{ item.loginName }}</td>
+            <td>
+              <progress-line
+                :sum="item.totalCount"
+                :current="item.successCount"
+              ></progress-line>
+            </td>
+            <td class="td-nopad">{{ item.progress }}%</td>
+            <td>{{ item.rejectedCount }}</td>
+          </tr>
+        </table>
+      </div>
+
+      <div v-if="IS_SCORE">
+        <table
+          v-for="(group, index) in groupMarkers"
+          :key="index"
+          class="table table-dark"
+        >
+          <colgroup>
+            <col width="120" />
+            <col width="210" />
+            <col width="60" />
+            <col width="80" />
+            <col width="100" />
+          </colgroup>
+          <tr>
+            <th>评卷员</th>
+            <th>进度</th>
+            <th></th>
+            <th>改档</th>
+            <th>改档打分</th>
+          </tr>
+          <tr v-for="(item, aindex) in group.markerProgress" :key="aindex">
+            <td>{{ item.loginName }}</td>
+            <td>
+              <progress-line
+                :sum="item.totalCount"
+                :current="item.successCount"
+              ></progress-line>
+            </td>
+            <td class="td-nopad">{{ item.progress }}%</td>
+            <td>{{ item.shiftCount }}</td>
+            <td>{{ item.shiftScoreCount }}</td>
+          </tr>
+        </table>
+      </div>
     </div>
   </Modal>
 </template>
 
 <script>
 import { mapState } from "vuex";
-import { gradingProgressDetail } from "@/api";
+import { markLeaderGradingProgressDetail } from "@/api";
 import ProgressLine from "../components/ProgressLine";
 
 export default {
@@ -107,10 +130,10 @@ export default {
   data() {
     return {
       modalIsShow: false,
-      kzzInfo: {},
+      kzzInfo: [],
       totalProgress: {},
       areaProgress: [],
-      markerProgress: []
+      groupMarkers: []
     };
   },
   computed: {
@@ -133,11 +156,11 @@ export default {
     },
     async initData() {
       const subjectId = this.$route.params.subjectId.split("-");
-      const data = await gradingProgressDetail({
+      const data = await markLeaderGradingProgressDetail({
         workId: subjectId[0],
         subject: subjectId[1]
       });
-      this.kzzInfo = data.kzz || {};
+      this.kzzInfo = data.kzz || [];
       this.totalProgress = data.totalProgress;
       const totalInfo = {
         successCount: data.totalProgress.successCount,
@@ -147,10 +170,13 @@ export default {
       };
       if (this.curSubject.stage === "INIT") {
         this.areaProgress = [totalInfo];
-        this.markerProgress = [];
+        this.groupMarkers = [];
       } else {
         this.areaProgress = [totalInfo, ...this.addProgress(data.areaProgress)];
-        this.markerProgress = this.addProgress(data.markerProgress);
+        this.groupMarkers = data.groupMarkers.map(group => {
+          group.markerProgress = this.addProgress(group.markerProgress);
+          return group;
+        });
       }
     },
     addProgress(data) {

+ 38 - 2
src/modules/main/QualityAnalysis.vue

@@ -27,6 +27,16 @@
               ></Option>
             </Select>
           </FormItem>
+          <FormItem>
+            <Select v-model="filter.groupId" placeholder="分组" clearable>
+              <Option
+                v-for="item in groups"
+                :key="item.id"
+                :value="item.id"
+                :label="item.name"
+              ></Option>
+            </Select>
+          </FormItem>
           <FormItem>
             <DatePicker
               v-model="searchTime"
@@ -124,7 +134,8 @@ import {
   distanceReport,
   callbackReport,
   subjectList,
-  areaList
+  areaList,
+  userGroupList
 } from "@/api";
 import EchartRender from "@/components/EchartRender";
 import QualityAnalysisExport from "./components/QualityAnalysisExport";
@@ -139,6 +150,7 @@ export default {
         workId: this.$route.params.workId,
         subject: "",
         areaCode: "",
+        groupId: "",
         startTime: null,
         endTime: null
       },
@@ -149,6 +161,7 @@ export default {
       callbackReportData: null,
       subjects: [],
       areas: [],
+      groups: [],
       dataReady: false,
       // export
       renderExportPage: false,
@@ -165,9 +178,10 @@ export default {
       await this.getSubjects();
       this.filter.subject = this.subjects[0].subject;
       this.filter.areaCode = "";
+      this.filter.groupId = "";
       this.areas = [];
       await this.getAreaList();
-      this.filter.areaCode = this.areas[0].areaCode;
+      await this.getGroupList();
       this.toSearch();
     },
     async getSubjects() {
@@ -186,10 +200,32 @@ export default {
           areaCode: item.areaCode
         };
       });
+
+      if (!this.filter.areaCode && this.areas.length) {
+        this.filter.areaCode = this.areas[0].areaCode;
+      }
+    },
+    async getGroupList() {
+      const data = await userGroupList({
+        workId: this.filter.workId,
+        subject: this.filter.subject
+      });
+      this.groups = data.map(item => {
+        return {
+          id: item.groupId,
+          name: item.groupName
+        };
+      });
+
+      if (!this.filter.groupId && this.groups.length) {
+        this.filter.groupId = this.groups[0].id;
+      }
     },
     subjectChange() {
       this.filter.areaCode = "";
+      this.filter.groupId = "";
       this.getAreaList();
+      this.getGroupList();
     },
     parseGroupBarData(datas) {
       if (!datas.length) {

+ 5 - 2
src/modules/mark/leader/LeaderMarking.vue

@@ -99,7 +99,7 @@ import {
   paperList,
   subjectDetail,
   changeLevelPaperList,
-  scoreStatData,
+  markLeaderScoreStatData,
   workLevelList,
   taskSnSearch,
   markStepChangeLevel,
@@ -220,7 +220,10 @@ export default {
       this.selectPaper(this.curPaperIndex);
     },
     async getStepLevels() {
-      const data = await scoreStatData(this.subjectId, this.filter.questionId);
+      const data = await markLeaderScoreStatData(
+        this.subjectId,
+        this.filter.questionId
+      );
       const undoIndex = data.findIndex(item => item.id === null);
       let otherStep = [];
       let undo = {