Blame view

src/views/basic/test/components/multipleTest.vue 7.04 KB
86201e49   梁保满   即时测模块
1
2
3
  <template>
    <div class="table-box" ref="main" v-loading="loading">
      <div id="print-content">
b0cd2598   梁保满   fix:测试问题
4
5
6
7
8
9
10
11
12
13
14
15
        <el-table
          :max-height="tableMaxHeight"
          :data="tableData"
          border
          style="width: 100%"
        >
          <el-table-column
            prop="studentCode"
            label="学号"
            align="center"
            fixed
          ></el-table-column>
86201e49   梁保满   即时测模块
16
          <el-table-column prop="studentName" label="姓名" fixed align="center">
7222c2eb   梁保满   汇总前置条件修改,教学,行政可汇总
17
18
19
            <template slot-scope="scoped">
              {{ scoped.row.studentName }}
            </template></el-table-column
b0cd2598   梁保满   fix:测试问题
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
          >
          <el-table-column
            align="center"
            v-for="(item, index) in answerList"
            :key="index"
            :label="item.title"
          >
            <el-table-column
              :prop="'score' + index"
              :label="index == 0 ? '总分' : '成绩'"
              align="center"
              :class-name="index % 2 == 0 ? 'bg' : ''"
            ></el-table-column>
            <el-table-column
              :prop="'classRank' + index"
              label="班名"
              align="center"
              sortable
              :class-name="index % 2 == 0 ? 'bg' : ''"
            ></el-table-column>
86201e49   梁保满   即时测模块
40
41
42
          </el-table-column>
          <el-table-column label="查看折线图" align="center">
            <template slot-scope="scoped">
b0cd2598   梁保满   fix:测试问题
43
44
45
46
47
48
49
              <el-button
                @click="openChart(scoped.row)"
                type="primary"
                size="mini"
                circle
                icon="el-icon-arrow-right"
              ></el-button>
86201e49   梁保满   即时测模块
50
51
52
53
54
            </template>
          </el-table-column>
        </el-table>
      </div>
      <div class="down">
b0cd2598   梁保满   fix:测试问题
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
        <el-button
          @click="openDown"
          type="primary"
          plain
          round
          icon="fa fa-cloud-download"
          >导出报表</el-button
        >
        <el-button
          v-if="!this.$store.getters.code"
          @click="print"
          type="primary"
          plain
          round
          icon="el-icon-printer"
          >打印</el-button
        >
86201e49   梁保满   即时测模块
72
      </div>
b0cd2598   梁保满   fix:测试问题
73
74
75
76
77
78
      <el-dialog
        class="chart-dia"
        :visible.sync="chartDia"
        :title="chartTitle"
        width="800"
      >
86201e49   梁保满   即时测模块
79
        <div class="chart-box">
b0cd2598   梁保满   fix:测试问题
80
81
82
83
84
85
          <LineChart
            id="lineChart"
            :params="chartData"
            :xAxis="xAxis"
            :formatterYAxis="false"
          />
86201e49   梁保满   即时测模块
86
87
        </div>
      </el-dialog>
b0cd2598   梁保满   fix:测试问题
88
89
90
91
92
93
94
      <ExportDia
        :exportStudent="exportStudent"
        :diaShow="diaShow"
        @cancel="cancel"
        @exportData="exportData"
        lastLabel="总分"
      />
86201e49   梁保满   即时测模块
95
96
97
98
    </div>
    <!-- 单科多卷 -->
  </template>
  <script>
b0cd2598   梁保满   fix:测试问题
99
  import LineChart from "@/components/charts/lineChart";
86201e49   梁保满   即时测模块
100
101
102
103
104
105
  import { downloadFile, tablePrint } from "@/utils";
  export default {
    components: { LineChart },
    props: {
      role: "",
      ids: Array,
7222c2eb   梁保满   汇总前置条件修改,教学,行政可汇总
106
      classIds: Array,
86201e49   梁保满   即时测模块
107
108
109
110
111
112
113
114
115
116
117
118
119
      subjectName: String,
    },
    data() {
      return {
        tableMaxHeight: null,
        answerList: [], //设置多卷内容供tableStage表格数据用
        tableData: [],
        loading: false,
        exportLoading: false,
        chartDia: false,
        studentName: "",
        xAxis: [],
        chartData: [],
e17ec739   梁保满   随堂问,即时测导出爆表修改
120
121
122
  
        //导出相关
        diaShow: false,
b0cd2598   梁保满   fix:测试问题
123
124
        exportStudent: [],
      };
86201e49   梁保满   即时测模块
125
126
127
    },
    computed: {
      chartTitle: function () {
b0cd2598   梁保满   fix:测试问题
128
129
        return `${this.studentName}-${this.subjectName}-多课时作答表现图`;
      },
86201e49   梁保满   即时测模块
130
131
    },
    created() {
b0cd2598   梁保满   fix:测试问题
132
      this.phaseExamReport();
86201e49   梁保满   即时测模块
133
134
135
136
137
138
    },
    mounted() {
      this.tableMaxHeight = this.$refs.main.offsetHeight;
    },
    methods: {
      print() {
b0cd2598   梁保满   fix:测试问题
139
        tablePrint("print-content", this.subjectName + "汇总报表");
86201e49   梁保满   即时测模块
140
      },
86201e49   梁保满   即时测模块
141
142
      //查看折线图
      openChart(obj) {
b0cd2598   梁保满   fix:测试问题
143
144
145
146
147
148
149
150
151
152
153
154
        this.studentName = obj.studentName;
        this.chartDia = true;
        let score = [];
        let classRank = [];
        let avgScore = [];
        const examList = obj.examList.slice(1, obj.examList.length);
        this.xAxis = examList.map((item) => {
          score.push(item.score);
          classRank.push(item.classRank);
          avgScore.push(item.avgScore);
          return item.title;
        });
86201e49   梁保满   即时测模块
155
156
        this.chartData = [
          {
22095aba   梁保满   接口联调
157
            name: "班级排名",
b0cd2598   梁保满   fix:测试问题
158
            value: classRank,
86201e49   梁保满   即时测模块
159
160
          },
          {
22095aba   梁保满   接口联调
161
            name: "班平均分",
b0cd2598   梁保满   fix:测试问题
162
            value: avgScore,
86201e49   梁保满   即时测模块
163
164
          },
          {
22095aba   梁保满   接口联调
165
            name: "个人成绩",
b0cd2598   梁保满   fix:测试问题
166
            value: score,
86201e49   梁保满   即时测模块
167
          },
b0cd2598   梁保满   fix:测试问题
168
        ];
86201e49   梁保满   即时测模块
169
170
171
172
173
174
175
176
      },
      async phaseExamReport() {
        this.loading = true;
        const phaseExamReport =
          this.role == "ROLE_PERSONAL"
            ? this.$request.pPhaseExamReport
            : this.$request.phaseExamReport;
        const { data, status, info } = await phaseExamReport({
7222c2eb   梁保满   汇总前置条件修改,教学,行政可汇总
177
          classIds: this.classIds,
86201e49   梁保满   即时测模块
178
          examIds: this.ids,
b0cd2598   梁保满   fix:测试问题
179
          subjectName: this.subjectName,
86201e49   梁保满   即时测模块
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
        });
        this.loading = false;
        if (status === 0) {
          this.total = data.count;
          let dataIdsList = [],
            dataList = [];
          data?.list.map((item) => {
            item.examList.map((items) => {
              if (!dataIdsList.includes(items.title)) {
                dataIdsList.push(items.title);
                dataList.push(items);
              }
            });
          });
          this.tableData = data?.list.map((item) => {
            let params = {};
            dataIdsList.map((ids, index) => {
              params["score" + index] = "--";
              params["classRank" + index] = "--";
              item.examList.map((items) => {
                if (items.title == ids) {
384a2a54   梁保满   请求头添加班主任信息,bug修改
201
                  params["score" + index] = Number(items.score);
86201e49   梁保满   即时测模块
202
203
204
205
206
207
208
209
210
211
                  params["classRank" + index] = items.classRank;
                }
              });
            });
            return {
              ...item,
              ...params,
            };
          });
          this.answerList = dataList;
e17ec739   梁保满   随堂问,即时测导出爆表修改
212
  
b0cd2598   梁保满   fix:测试问题
213
          this.exportStudent = [...this.tableData];
86201e49   梁保满   即时测模块
214
215
216
217
218
        } else {
          this.$message.error(info);
        }
      },
      //导出
e17ec739   梁保满   随堂问,即时测导出爆表修改
219
220
221
222
223
224
225
      openDown() {
        this.diaShow = true;
      },
      cancel() {
        this.diaShow = false;
      },
      async exportData(arr) {
86201e49   梁保满   即时测模块
226
227
        if (this.exportLoading == true) return;
        this.exportLoading = true;
b0cd2598   梁保满   fix:测试问题
228
        let studentIds = arr;
e17ec739   梁保满   随堂问,即时测导出爆表修改
229
        let query = {};
b0cd2598   梁保满   fix:测试问题
230
        if (studentIds != null) {
ce278878   梁保满   2-2 bugfix
231
          if (studentIds.length > 0) {
b0cd2598   梁保满   fix:测试问题
232
            query.studentIds = studentIds;
ce278878   梁保满   2-2 bugfix
233
          } else {
b0cd2598   梁保满   fix:测试问题
234
            query.studentIds = [];
ce278878   梁保满   2-2 bugfix
235
          }
e17ec739   梁保满   随堂问,即时测导出爆表修改
236
        }
b0cd2598   梁保满   fix:测试问题
237
238
239
240
        const exportPhaseExamReport =
          this.role == "ROLE_PERSONAL"
            ? this.$request.pExportPhaseExamReport
            : this.$request.exportPhaseExamReport;
86201e49   梁保满   即时测模块
241
        const data = await exportPhaseExamReport({
7222c2eb   梁保满   汇总前置条件修改,教学,行政可汇总
242
          classIds: this.classIds,
049db2b2   梁保满   接口联调
243
          examIds: this.ids,
b0cd2598   梁保满   fix:测试问题
244
          ...query,
86201e49   梁保满   即时测模块
245
246
247
248
249
250
251
        });
        this.exportLoading = false;
        if (data) {
          let blob = new Blob([data], {
            type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
          });
          downloadFile("即时测-单科多卷报表.xlsx", blob);
f9916d4c   梁保满   导出摸板
252
          this.$message.success("下载成功");
b0cd2598   梁保满   fix:测试问题
253
          this.cancel();
86201e49   梁保满   即时测模块
254
255
256
257
        } else {
          this.$message.error("下载失败");
        }
      },
b0cd2598   梁保满   fix:测试问题
258
    },
86201e49   梁保满   即时测模块
259
260
261
262
263
264
265
266
267
268
269
270
271
272
  };
  </script>
  <style lang="scss" scoped>
  .table-box {
    padding: 20px;
  }
  
  .down {
    padding-top: 20px;
    width: 100%;
    display: flex;
    justify-content: space-between;
  }
  
86201e49   梁保满   即时测模块
273
274
275
276
277
278
279
280
281
282
283
  .chart-dia {
    .chart-box {
      width: 100%;
      height: 300px;
    }
  
    :deep(.el-dialog__body) {
      padding: 0 0 20px 0;
    }
  }
  </style>