Blame view

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