添加loading

master
yujialong 8 months ago
parent 55b3fb1996
commit bc40fb5f28
  1. 421
      src/pages/achievement/info/course.vue
  2. 523
      src/pages/achievement/info/project.vue
  3. 13
      src/pages/achievement/list/course.vue
  4. 14
      src/pages/achievement/list/project.vue
  5. 64
      src/pages/achievement/show/index.vue
  6. 14
      src/pages/assessment/list/index.vue
  7. 10
      src/pages/expSystem/list/index.vue
  8. 5
      src/pages/match/list/index.vue
  9. 4
      src/pages/match/manage/matchArchList.vue
  10. 19
      src/pages/match/manage/matchRank.vue
  11. 31
      src/pages/match/manage/matchSignup.vue
  12. 2
      src/pages/product/list/index.vue
  13. 11
      src/pages/project/add/index.vue

@ -8,269 +8,270 @@
</div> </div>
</el-card> </el-card>
<el-card shadow="hover" <div v-loading="loading">
class="m-b-20">
<el-tabs v-model="classId"
@tab-click="classChange">
<el-tab-pane v-for="(item, i) in classList"
:key="i"
:name="item.id"
:label="item.className"></el-tab-pane>
</el-tabs>
<el-card shadow="hover" <el-card shadow="hover"
class="m-b-20"> class="m-b-20">
<el-tabs v-model="curTab" <el-tabs v-model="classId"
@tab-click="tabChange"> @tab-click="classChange">
<el-tab-pane v-for="(item) in tabs" <el-tab-pane v-for="(item, i) in classList"
:label="item.name" :key="i"
:name="item.id" :name="item.id"
:key="item.id"></el-tab-pane> :label="item.className"></el-tab-pane>
</el-tabs> </el-tabs>
<div class="stat">
<div class="nums"> <el-card shadow="hover"
<div class="item"> class="m-b-20">
<p class="name">实验总人数</p> <el-tabs v-model="curTab"
<p class="val">{{ peopleNum }}</p> @tab-click="tabChange">
</div> <el-tab-pane v-for="(item) in tabs"
<div class="item item2"> :label="item.name"
<p class="name">实验平均分</p> :name="item.id"
<p class="val">{{ avgScore }}</p> :key="item.id"></el-tab-pane>
</el-tabs>
<div class="stat">
<div class="nums">
<div class="item">
<p class="name">实验总人数</p>
<p class="val">{{ peopleNum }}</p>
</div>
<div class="item item2">
<p class="name">实验平均分</p>
<p class="val">{{ avgScore }}</p>
</div>
<div class="item item3">
<p class="name">实验最高分</p>
<p class="val">{{ maxScore || 0 }}</p>
</div>
<div class="item item4">
<p class="name">实验最低分</p>
<p class="val">{{ minScore || 0 }}</p>
</div>
</div> </div>
<div class="item item3"> <div class="chart"
<p class="name">实验最高分</p> id="chart"></div>
<p class="val">{{ maxScore || 0 }}</p> </div>
</el-card>
<el-card shadow="hover"
class="m-b-20">
<h6 style="font-size: 16px">错误率分析</h6>
<div class="wrong">
<div class="line">
<span class="jud-name">错误率最高{{ max.projectName }}</span>
<span>参加考试{{ permissions ? (max.numberOfParticipants || 0) : (max.quantityAfterWeightRemoval || 0) }}&emsp;&emsp;{{ curTab == 1 ? `${max.itemErrorCount || 0}人做错,` : '' }}错误率{{ max.errorRate || 0 }}%</span>
</div> </div>
<div class="item item4"> <div class="line">
<p class="name">实验最低分</p> <span class="jud-name">错误率最低{{ min.projectName }}</span>
<p class="val">{{ minScore || 0 }}</p> <span>参加考试{{ permissions ? (min.numberOfParticipants || 0) : (min.quantityAfterWeightRemoval || 0) }}&emsp;&emsp;{{ curTab == 1 ? `${min.itemErrorCount || 0}人做错,` : '' }}错误率{{ min.errorRate || 0 }}%</span>
</div> </div>
</div> </div>
<div class="chart" <div class="chart"
id="chart"></div> id="chart1"></div>
</div> </el-card>
</el-card>
<el-card shadow="hover" <el-card shadow="hover">
class="m-b-20"> <div class="flex-between m-b-20">
<h6 style="font-size: 16px">错误率分析</h6> <div>
<div class="wrong"> <el-input placeholder="请输入姓名/学号"
<div class="line"> prefix-icon="el-icon-search"
<span class="jud-name">错误率最高{{ max.projectName }}</span> v-model="keyword"
<span>参加考试{{ permissions ? (max.numberOfParticipants || 0) : (max.quantityAfterWeightRemoval || 0) }}&emsp;&emsp;{{ curTab == 1 ? `${max.itemErrorCount || 0}人做错,` : '' }}错误率{{ max.errorRate || 0 }}%</span> clearable></el-input>
</div>
<div>
<el-button type="primary"
@click="exportData">导出成绩列表</el-button>
<!-- <el-button type="primary"
@click="exportReport">导出成绩详情</el-button> -->
</div>
</div> </div>
<div class="line"> <el-table :data="listData"
<span class="jud-name">错误率最低{{ min.projectName }}</span> class="table"
<span>参加考试{{ permissions ? (min.numberOfParticipants || 0) : (min.quantityAfterWeightRemoval || 0) }}&emsp;&emsp;{{ curTab == 1 ? `${min.itemErrorCount || 0}人做错,` : '' }}错误率{{ min.errorRate || 0 }}%</span> ref="table"
:key="curTab"
stripe
header-align="center"
@selection-change="handleSelectionChange"
row-key="reportId">
<el-table-column type="selection"
width="55"
align="center"
:reserve-selection="true"></el-table-column>
<el-table-column type="index"
width="60"
label="序号"
align="center">
<template slot-scope="scope">
{{ scope.$index + (page - 1) * pageSize + 1 }}
</template>
</el-table-column>
<el-table-column prop="userName"
label="姓名"
align="center"></el-table-column>
<el-table-column prop="workNumber"
label="学号"
align="center"></el-table-column>
<template v-if="curTab == 0">
<el-table-column label="练习项目数"
align="center">
<template slot-scope="scope">
{{ scope.row.totalNumberOfPractices }}
</template>
</el-table-column>
<el-table-column prop="numberOfExercises"
label="练习次数"
width="90"
align="center"></el-table-column>
<el-table-column label="累计练习时长"
align="center">
<template slot-scope="scope">
{{ scope.row.cumulativePracticeTime }}min
</template>
</el-table-column>
</template>
<template v-else>
<el-table-column prop="totalNumberOfParticipants"
label="参加考核次数"
align="center">
</el-table-column>
<el-table-column prop="averageTimeSpent"
label="平均用时"
align="center">
<template slot-scope="scope">
{{ scope.row.averageTimeSpent }}min
</template>
</el-table-column>
</template>
<el-table-column prop="avgScore"
label="平均分"
align="center">
<template slot-scope="scope">
{{ curTab == 0 ? scope.row.avgScore : scope.row.averageScore }}
</template>
</el-table-column>
<el-table-column prop="maxScore"
label="最高分"
align="center"></el-table-column>
<el-table-column prop="minScore"
label="最低分"
align="center"></el-table-column>
<el-table-column label="操作"
align="center"
width="140">
<template slot-scope="scope">
<el-button type="text"
@click="show(scope.row)">查看成绩详情</el-button>
</template>
</el-table-column>
</el-table>
<div class="pagination">
<el-pagination background
layout="total, prev, pager, next"
:total="total"
@current-change="handleCurrentChange"
:current-page="page">
</el-pagination>
</div> </div>
</div> </el-card>
<div class="chart"
id="chart1"></div>
</el-card> </el-card>
<el-card shadow="hover"> <el-dialog title="成绩详情"
<div class="flex-between m-b-20"> :visible.sync="detailVisible"
<div> width="900px"
<el-input placeholder="请输入姓名/学号" :key="curTab"
prefix-icon="el-icon-search" :close-on-click-modal="false">
v-model="keyword" <div class="m-b-10 text-right">
clearable></el-input> <el-button type="primary"
</div> @click="exportDetail">导出</el-button>
<div>
<el-button type="primary"
@click="exportData">导出成绩列表</el-button>
<!-- <el-button type="primary"
@click="exportReport">导出成绩详情</el-button> -->
</div>
</div> </div>
<el-table :data="listData" <el-table :data="details"
class="table"
ref="table"
:key="curTab"
stripe stripe
:key="curTab"
header-align="center" header-align="center"
@selection-change="handleSelectionChange" row-key="id">
row-key="reportId">
<el-table-column type="selection"
width="55"
align="center"
:reserve-selection="true"></el-table-column>
<el-table-column type="index" <el-table-column type="index"
width="60" width="60"
label="序号" label="序号"
align="center"> align="center">
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.$index + (page - 1) * pageSize + 1 }} {{ scope.$index + (pageDetail - 1) * pageSizeDetail + 1 }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="userName" <el-table-column prop="userName"
label="姓名" label="姓名"
align="center"></el-table-column> width="100"
align="center">
</el-table-column>
<el-table-column prop="workNumber" <el-table-column prop="workNumber"
label="学号" label="学号"
width="100"
align="center"></el-table-column> align="center"></el-table-column>
<template v-if="curTab == 0"> <template v-if="curTab == 0">
<el-table-column label="练习项目数" <el-table-column prop="projectName"
align="center"> label="项目名称"
<template slot-scope="scope"> min-width="200"
{{ scope.row.totalNumberOfPractices }}
</template>
</el-table-column>
<el-table-column prop="numberOfExercises"
label="练习次数"
width="90"
align="center"></el-table-column> align="center"></el-table-column>
<el-table-column label="累计练习时长" <el-table-column prop="averageDuration"
label="平均练习时长"
width="110"
align="center"> align="center">
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.cumulativePracticeTime }}min {{ scope.row.averageDuration }}min
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="averageScore"
label="平均分"
min-width="100"
align="center"></el-table-column>
</template> </template>
<template v-else> <template v-else>
<el-table-column prop="totalNumberOfParticipants" <el-table-column prop="experimentalName"
label="参加考核次数" label="考核名称"
align="center"> min-width="200"
</el-table-column> align="center"></el-table-column>
<el-table-column prop="averageTimeSpent" <el-table-column prop="averageDuration"
label="平均用时" label="用时"
width="100"
align="center"> align="center">
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.averageTimeSpent }}min {{ scope.row.timeSum }}min
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="score"
label="分数"
min-width="100"
align="center"></el-table-column>
</template> </template>
<el-table-column prop="avgScore" <el-table-column label="成绩报告"
label="平均分"
align="center">
<template slot-scope="scope">
{{ curTab == 0 ? scope.row.avgScore : scope.row.averageScore }}
</template>
</el-table-column>
<el-table-column prop="maxScore"
label="最高分"
align="center"></el-table-column>
<el-table-column prop="minScore"
label="最低分"
align="center"></el-table-column>
<el-table-column label="操作"
align="center" align="center"
width="140"> width="90">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="text" <el-button type="text"
@click="show(scope.row)">查看成绩详情</el-button> @click="toReport(scope.row)">查看</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<div class="pagination"> <div class="pagination">
<el-pagination background <el-pagination background
layout="total, prev, pager, next" layout="total, prev, pager, next"
:total="total" :total="totalDetail"
@current-change="handleCurrentChange" :page-size="pageSizeDetail"
:current-page="page"> @current-change="handleCurrentDetailChange"
:current-page="pageDetail">
</el-pagination> </el-pagination>
</div> </div>
</el-card> <span slot="footer"
class="dialog-footer">
</el-card> <el-button size="small"
type="primary"
<el-dialog title="成绩详情" @click="detailVisible = false">确定</el-button>
:visible.sync="detailVisible" </span>
width="900px" </el-dialog>
:key="curTab" </div>
:close-on-click-modal="false">
<div class="m-b-10 text-right">
<el-button type="primary"
@click="exportDetail">导出</el-button>
</div>
<el-table :data="details"
stripe
:key="curTab"
header-align="center"
row-key="id">
<el-table-column type="index"
width="60"
label="序号"
align="center">
<template slot-scope="scope">
{{ scope.$index + (pageDetail - 1) * pageSizeDetail + 1 }}
</template>
</el-table-column>
<el-table-column prop="userName"
label="姓名"
width="100"
align="center">
</el-table-column>
<el-table-column prop="workNumber"
label="学号"
width="100"
align="center"></el-table-column>
<template v-if="curTab == 0">
<el-table-column prop="projectName"
label="项目名称"
min-width="200"
align="center"></el-table-column>
<el-table-column prop="averageDuration"
label="平均练习时长"
width="110"
align="center">
<template slot-scope="scope">
{{ scope.row.averageDuration }}min
</template>
</el-table-column>
<el-table-column prop="averageScore"
label="平均分"
min-width="100"
align="center"></el-table-column>
</template>
<template v-else>
<el-table-column prop="experimentalName"
label="考核名称"
min-width="200"
align="center"></el-table-column>
<el-table-column prop="averageDuration"
label="用时"
width="100"
align="center">
<template slot-scope="scope">
{{ scope.row.timeSum }}min
</template>
</el-table-column>
<el-table-column prop="score"
label="分数"
min-width="100"
align="center"></el-table-column>
</template>
<el-table-column label="成绩报告"
align="center"
width="90">
<template slot-scope="scope">
<el-button type="text"
@click="toReport(scope.row)">查看</el-button>
</template>
</el-table-column>
</el-table>
<div class="pagination">
<el-pagination background
layout="total, prev, pager, next"
:total="totalDetail"
:page-size="pageSizeDetail"
@current-change="handleCurrentDetailChange"
:current-page="pageDetail">
</el-pagination>
</div>
<span slot="footer"
class="dialog-footer">
<el-button size="small"
type="primary"
@click="detailVisible = false">确定</el-button>
</span>
</el-dialog>
</div> </div>
</template> </template>
<script> <script>
import { Loading } from "element-ui";
import Setting from "@/setting"; import Setting from "@/setting";
import util from "@/libs/util"; import util from "@/libs/util";
import echarts from "echarts"; import echarts from "echarts";
@ -320,7 +321,7 @@ export default {
totalDetail: 0, totalDetail: 0,
curRow: {}, curRow: {},
stageNumber: {}, stageNumber: {},
loadIns: null loading: false,
}; };
}, },
watch: { watch: {
@ -338,9 +339,7 @@ export default {
methods: { methods: {
// //
async getData () { async getData () {
this.loadIns = Loading.service({ this.loading = true
background: "rgba(255,255,255,.6)"
})
const per = +this.curTab const per = +this.curTab
const res = await this.$post(this.api.productReadScore, { const res = await this.$post(this.api.productReadScore, {
pageNum: this.page, pageNum: this.page,
@ -587,7 +586,7 @@ export default {
color: ["#8191fd"] color: ["#8191fd"]
}] }]
}) })
this.loadIns.close() this.loading = false
}, },
// //
errorChart () { errorChart () {

@ -6,276 +6,277 @@
<span class="name">{{ experimentalName }}</span> <span class="name">{{ experimentalName }}</span>
</div> </div>
<el-card v-if="classes.length" <div v-loading="loading">
shadow="hover" <el-card v-if="classes.length"
class="m-b-20 head-card"> shadow="hover"
<div class="flex-between m-b-20"> class="m-b-20 head-card">
<div> <div class="flex-between m-b-20">
<span class="m-r-10">班级</span> <div>
<el-select v-model="classId" <span class="m-r-10">班级</span>
clearable <el-select v-model="classId"
@change="initData"> clearable
<el-option label="不限" @change="initData">
value=""> <el-option label="不限"
</el-option> value="">
<el-option v-for="item in classes" </el-option>
:key="item.id" <el-option v-for="item in classes"
:label="item.className" :key="item.id"
:value="item.id"> :label="item.className"
</el-option> :value="item.id">
</el-select> </el-option>
</el-select>
</div>
</div> </div>
</div> </el-card>
</el-card>
<el-card shadow="hover" <el-card shadow="hover"
class="m-b-20"> class="m-b-20">
<div class="stat"> <div class="stat">
<div class="nums"> <div class="nums">
<div class="item"> <div class="item">
<p class="name">{{ permissions && classId != 1 ? '已参加/应参加实验人数' : '实验总人数' }}</p> <p class="name">{{ permissions && classId != 1 ? '已参加/应参加实验人数' : '实验总人数' }}</p>
<p class="val">{{ peopleNum + (permissions && classId != 1 ? '/' + examCount : '') }}</p> <p class="val">{{ peopleNum + (permissions && classId != 1 ? '/' + examCount : '') }}</p>
</div> </div>
<div class="item item2"> <div class="item item2">
<p class="name">实验平均分</p> <p class="name">实验平均分</p>
<p class="val">{{ avgScore }}</p> <p class="val">{{ avgScore }}</p>
</div>
<div class="item item3">
<p class="name">实验最高分</p>
<p class="val">{{ maxScore }}</p>
</div>
<div class="item item4">
<p class="name">实验最低分</p>
<p class="val">{{ minScore }}</p>
</div>
</div> </div>
<div class="item item3"> <div class="chart"
<p class="name">实验最高分</p> id="chart"></div>
<p class="val">{{ maxScore }}</p> </div>
</el-card>
<el-card shadow="hover"
class="m-b-20">
<h6 style="font-size: 16px">错误率分析</h6>
<div class="wrong">
<div class="line">
<span class="jud-name">错误率最高{{ max.judgmentName }}</span>
<span>参加考试{{ peopleNum }}&emsp;&emsp;{{ permissions ? `${max.errorTotal || 0}人做错,` : '' }}错误率{{ max.errorRate }}%</span>
</div> </div>
<div class="item item4"> <div class="line">
<p class="name">实验最低分</p> <span class="jud-name">错误率最低{{ min.judgmentName }}</span>
<p class="val">{{ minScore }}</p> <span>参加考试{{ peopleNum }}&emsp;&emsp;{{ permissions ? `${min.errorTotal || 0}人做错,` : '' }}错误率{{ min.errorRate }}%</span>
</div> </div>
</div> </div>
<div class="chart" <div class="chart"
id="chart"></div> id="chart1"></div>
</div> </el-card>
</el-card>
<el-card shadow="hover"
class="m-b-20">
<h6 style="font-size: 16px">错误率分析</h6>
<div class="wrong">
<div class="line">
<span class="jud-name">错误率最高{{ max.judgmentName }}</span>
<span>参加考试{{ peopleNum }}&emsp;&emsp;{{ permissions ? `${max.errorTotal || 0}人做错,` : '' }}错误率{{ max.errorRate }}%</span>
</div>
<div class="line">
<span class="jud-name">错误率最低{{ min.judgmentName }}</span>
<span>参加考试{{ peopleNum }}&emsp;&emsp;{{ permissions ? `${min.errorTotal || 0}人做错,` : '' }}错误率{{ min.errorRate }}%</span>
</div>
</div>
<div class="chart"
id="chart1"></div>
</el-card>
<el-card shadow="hover"> <el-card shadow="hover">
<div class="flex-between m-b-10"> <div class="flex-between m-b-10">
<div> <div>
<el-tabs v-model="curTab" <el-tabs v-model="curTab"
@tab-click="initData"> @tab-click="initData">
<el-tab-pane v-for="(item) in tabs" <el-tab-pane v-for="(item) in tabs"
:label="item.name" :label="item.name"
:name="item.id" :name="item.id"
:key="item.id"></el-tab-pane> :key="item.id"></el-tab-pane>
</el-tabs> </el-tabs>
</div> </div>
</div>
<div class="flex-between m-b-20">
<div>
<el-input placeholder="请输入姓名/学号"
prefix-icon="el-icon-search"
v-model="keyword"
clearable></el-input>
</div>
<div v-if="curTab == 0">
<el-button type="primary"
@click="delAllData">批量删除</el-button>
<el-button type="primary"
@click="exportData">导出成绩列表</el-button>
<el-button type="primary"
@click="exportReport">导出成绩报告</el-button>
</div>
<div v-else>
<el-button type="primary"
@click="exportDataActivation">导出</el-button>
</div>
</div>
<template v-if="curTab == 0">
<el-table :data="listData"
:key="1"
class="table"
ref="table"
stripe
header-align="center"
@selection-change="handleSelectionChange"
row-key="reportId">
<el-table-column type="selection"
width="55"
align="center"
:reserve-selection="true"></el-table-column>
<el-table-column type="index"
width="60"
label="序号"
align="center">
<template slot-scope="scope">
{{ scope.$index + (page - 1) * pageSize + 1 }}
</template>
</el-table-column>
<el-table-column prop="className"
label="班级"
min-width="150"
align="center">
</el-table-column>
<el-table-column v-if="permissions"
prop="experimentalName"
label="考核名称"
min-width="250"
align="center"></el-table-column>
<el-table-column prop="userName"
label="学生姓名"
min-width="100"
align="center"></el-table-column>
<el-table-column prop="workNumber"
label="学号"
min-width="100"
align="center"></el-table-column>
<el-table-column prop="score"
label="分数"
width="90"
align="center"></el-table-column>
<el-table-column prop="timeSum"
label="耗时"
width="90"
align="center">
<template slot-scope="scope">
{{ scope.row.timeSum + (scope.row.reportId ? 'min' : '') }}
</template>
</el-table-column>
<el-table-column prop="submitTime"
label="提交时间"
min-width="150"
align="center">
</el-table-column>
<el-table-column v-if="permissions"
prop="submitTime"
label="状态"
min-width="150"
align="center">
<template slot-scope="scope">
{{ scope.row.reportId ? '已参加' : '未参加' }}
</template>
</el-table-column>
<el-table-column label="操作"
align="center"
width="160">
<template slot-scope="scope">
<tempalte v-if="scope.row.reportId">
<el-button type="text"
@click="show(scope.row)">查看成绩报告</el-button>
<el-button type="text"
@click="handleDelete(scope.row)">删除</el-button>
</tempalte>
</template>
</el-table-column>
</el-table>
<div class="pagination">
<el-pagination background
layout="total, prev, pager, next"
:total="total"
@current-change="handleCurrentChange"
:current-page="page">
</el-pagination>
</div> </div>
</template> <div class="flex-between m-b-20">
<template v-else> <div>
<el-table :data="activations" <el-input placeholder="请输入姓名/学号"
:key="2" prefix-icon="el-icon-search"
ref="table" v-model="keyword"
stripe clearable></el-input>
header-align="center" </div>
@selection-change="handleSelectionActivationChange" <div v-if="curTab == 0">
row-key="reportId"> <el-button type="primary"
<el-table-column type="selection" @click="delAllData">批量删除</el-button>
width="55" <el-button type="primary"
align="center" @click="exportData">导出成绩列表</el-button>
:reserve-selection="true"></el-table-column> <el-button type="primary"
<el-table-column type="index" @click="exportReport">导出成绩报告</el-button>
width="60" </div>
label="序号" <div v-else>
align="center"> <el-button type="primary"
<template slot-scope="scope"> @click="exportDataActivation">导出</el-button>
{{ scope.$index + (pageActivation - 1) * pageSizeActivation + 1 }} </div>
</template>
</el-table-column>
<el-table-column prop="className"
label="班级"
min-width="150"
align="center">
</el-table-column>
<el-table-column prop="userName"
label="学生姓名"
min-width="100"
align="center"></el-table-column>
<el-table-column prop="workNumber"
label="学号"
min-width="100"
align="center"></el-table-column>
<el-table-column prop="practiceNum"
label="练习次数"
min-width="90"
align="center"></el-table-column>
<el-table-column prop="avgScore"
label="实验平均分"
min-width="90"
align="center"></el-table-column>
<el-table-column prop="highestScore"
label="实验最高分"
min-width="90"
align="center"></el-table-column>
<el-table-column prop="lowestMark"
label="实验最低分"
min-width="90"
align="center"></el-table-column>
<el-table-column prop="timeSum"
label="耗时最多"
min-width="90"
align="center">
<template slot-scope="scope">
{{ scope.row.theLongestTime }}min
</template>
</el-table-column>
<el-table-column prop="timeSum"
label="耗时最少"
min-width="90"
align="center">
<template slot-scope="scope">
{{ scope.row.shortestTime }}min
</template>
</el-table-column>
<el-table-column prop="lastSubmissionTime"
label="最近提交时间"
min-width="150"
align="center">
</el-table-column>
</el-table>
<div class="pagination">
<el-pagination background
layout="total, prev, pager, next"
:total="totalActivation"
@current-change="handleCurrentActivationChange"
:current-page="pageActivation">
</el-pagination>
</div> </div>
</template> <template v-if="curTab == 0">
</el-card> <el-table :data="listData"
:key="1"
class="table"
ref="table"
stripe
header-align="center"
@selection-change="handleSelectionChange"
row-key="reportId">
<el-table-column type="selection"
width="55"
align="center"
:reserve-selection="true"></el-table-column>
<el-table-column type="index"
width="60"
label="序号"
align="center">
<template slot-scope="scope">
{{ scope.$index + (page - 1) * pageSize + 1 }}
</template>
</el-table-column>
<el-table-column prop="className"
label="班级"
min-width="150"
align="center">
</el-table-column>
<el-table-column v-if="permissions"
prop="experimentalName"
label="考核名称"
min-width="250"
align="center"></el-table-column>
<el-table-column prop="userName"
label="学生姓名"
min-width="100"
align="center"></el-table-column>
<el-table-column prop="workNumber"
label="学号"
min-width="100"
align="center"></el-table-column>
<el-table-column prop="score"
label="分数"
width="90"
align="center"></el-table-column>
<el-table-column prop="timeSum"
label="耗时"
width="90"
align="center">
<template slot-scope="scope">
{{ scope.row.timeSum + (scope.row.reportId ? 'min' : '') }}
</template>
</el-table-column>
<el-table-column prop="submitTime"
label="提交时间"
min-width="150"
align="center">
</el-table-column>
<el-table-column v-if="permissions"
prop="submitTime"
label="状态"
min-width="150"
align="center">
<template slot-scope="scope">
{{ scope.row.reportId ? '已参加' : '未参加' }}
</template>
</el-table-column>
<el-table-column label="操作"
align="center"
width="160">
<template slot-scope="scope">
<tempalte v-if="scope.row.reportId">
<el-button type="text"
@click="show(scope.row)">查看成绩报告</el-button>
<el-button type="text"
@click="handleDelete(scope.row)">删除</el-button>
</tempalte>
</template>
</el-table-column>
</el-table>
<div class="pagination">
<el-pagination background
layout="total, prev, pager, next"
:total="total"
@current-change="handleCurrentChange"
:current-page="page">
</el-pagination>
</div>
</template>
<template v-else>
<el-table :data="activations"
:key="2"
ref="table"
stripe
header-align="center"
@selection-change="handleSelectionActivationChange"
row-key="reportId">
<el-table-column type="selection"
width="55"
align="center"
:reserve-selection="true"></el-table-column>
<el-table-column type="index"
width="60"
label="序号"
align="center">
<template slot-scope="scope">
{{ scope.$index + (pageActivation - 1) * pageSizeActivation + 1 }}
</template>
</el-table-column>
<el-table-column prop="className"
label="班级"
min-width="150"
align="center">
</el-table-column>
<el-table-column prop="userName"
label="学生姓名"
min-width="100"
align="center"></el-table-column>
<el-table-column prop="workNumber"
label="学号"
min-width="100"
align="center"></el-table-column>
<el-table-column prop="practiceNum"
label="练习次数"
min-width="90"
align="center"></el-table-column>
<el-table-column prop="avgScore"
label="实验平均分"
min-width="90"
align="center"></el-table-column>
<el-table-column prop="highestScore"
label="实验最高分"
min-width="90"
align="center"></el-table-column>
<el-table-column prop="lowestMark"
label="实验最低分"
min-width="90"
align="center"></el-table-column>
<el-table-column prop="timeSum"
label="耗时最多"
min-width="90"
align="center">
<template slot-scope="scope">
{{ scope.row.theLongestTime }}min
</template>
</el-table-column>
<el-table-column prop="timeSum"
label="耗时最少"
min-width="90"
align="center">
<template slot-scope="scope">
{{ scope.row.shortestTime }}min
</template>
</el-table-column>
<el-table-column prop="lastSubmissionTime"
label="最近提交时间"
min-width="150"
align="center">
</el-table-column>
</el-table>
<div class="pagination">
<el-pagination background
layout="total, prev, pager, next"
:total="totalActivation"
@current-change="handleCurrentActivationChange"
:current-page="pageActivation">
</el-pagination>
</div>
</template>
</el-card>
</div>
</div> </div>
</template> </template>
<script> <script>
import { Loading } from "element-ui";
import Setting from "@/setting"; import Setting from "@/setting";
import util from "@/libs/util"; import util from "@/libs/util";
import echarts from "echarts"; import echarts from "echarts";
@ -320,7 +321,7 @@ export default {
pageActivation: 1, pageActivation: 1,
pageSizeActivation: 10, pageSizeActivation: 10,
totalActivation: 0, totalActivation: 0,
loadIns: null, loading: false,
scores: {} scores: {}
}; };
}, },
@ -366,9 +367,7 @@ export default {
}, },
// //
async getData () { async getData () {
this.loadIns = Loading.service({ this.loading = true
background: "rgba(255,255,255,.6)"
})
try { try {
// //
const res = this.permissions ? const res = this.permissions ?
@ -388,7 +387,7 @@ export default {
this.getChart() this.getChart()
this.errorChart() this.errorChart()
} catch (e) { } catch (e) {
this.loadIns.close() this.loading = false
} }
}, },
// //
@ -561,7 +560,7 @@ export default {
color: ["#8191fd"] color: ["#8191fd"]
}] }]
}) })
this.loadIns.close() this.loading = false
}, },
// //
errorChart () { errorChart () {

@ -1,5 +1,6 @@
<template> <template>
<div class="page"> <div class="page"
v-loading="loading">
<h6 class="p-title">筛选</h6> <h6 class="p-title">筛选</h6>
<div class="tool mul"> <div class="tool mul">
<ul class="filter"> <ul class="filter">
@ -136,7 +137,7 @@ export default {
page: this.$route.query.page ? +this.$route.query.page : 1, page: this.$route.query.page ? +this.$route.query.page : 1,
pageSize: 10, pageSize: 10,
total: 0, total: 0,
loadIns: null loading: false,
}; };
}, },
watch: { watch: {
@ -203,9 +204,7 @@ export default {
}).catch(res => { }) }).catch(res => { })
}, },
getData () { getData () {
this.loadIns = Loading.service({ this.loading = true
background: "rgba(255,255,255,.6)"
});
this.$post(this.api.practiceByProduct, { this.$post(this.api.practiceByProduct, {
classId: this.classId, classId: this.classId,
mallId: this.mallId, mallId: this.mallId,
@ -216,10 +215,10 @@ export default {
this.list = res.data this.list = res.data
this.total = res.total this.total = res.total
this.$nextTick(() => { this.$nextTick(() => {
this.loadIns.close() this.loading = false
}); });
}).catch(res => { }).catch(res => {
this.loadIns.close() this.loading = false
}); });
}, },
// //

@ -1,5 +1,6 @@
<template> <template>
<div class="page"> <div class="page"
v-loading="loading">
<h6 class="p-title">筛选</h6> <h6 class="p-title">筛选</h6>
<div class="tool mul"> <div class="tool mul">
<ul class="filter"> <ul class="filter">
@ -158,7 +159,6 @@
</template> </template>
<script> <script>
import { Loading } from "element-ui";
import util from "@/libs/util"; import util from "@/libs/util";
export default { export default {
name: "achievement", name: "achievement",
@ -203,7 +203,7 @@ export default {
page: this.$route.query.page ? +this.$route.query.page : 1, page: this.$route.query.page ? +this.$route.query.page : 1,
pageSize: 10, pageSize: 10,
total: 0, total: 0,
loadIns: null loading: false,
}; };
}, },
watch: { watch: {
@ -275,9 +275,7 @@ export default {
}).catch(res => { }) }).catch(res => { })
}, },
getData () { getData () {
this.loadIns = Loading.service({ this.loading = true
background: "rgba(255,255,255,.6)"
})
const per = this.projectPermissions const per = this.projectPermissions
const { mallId } = this const { mallId } = this
const cur = this.curs.find(e => e.mallId == mallId) || {} const cur = this.curs.find(e => e.mallId == mallId) || {}
@ -311,10 +309,10 @@ export default {
}) })
this.listData = list this.listData = list
this.$nextTick(() => { this.$nextTick(() => {
this.loadIns.close() this.loading = false
}); });
}).catch(res => { }).catch(res => {
this.loadIns.close() this.loading = false
}); });
}, },
// //

@ -6,7 +6,8 @@
content="查看报告"></el-page-header> content="查看报告"></el-page-header>
</el-card> </el-card>
<div class="content"> <div class="content"
v-loading="loading">
<div class="text-right"> <div class="text-right">
<el-button type="primary" <el-button type="primary"
@click="exportPage">导出报告</el-button> @click="exportPage">导出报告</el-button>
@ -243,36 +244,36 @@ export default {
this.getData() this.getData()
}, },
methods: { methods: {
getData () { // async getData () { //
this.$get(`${this.api.reportDetail}?reportId=${this.reportId}`).then(({ report, userScores }) => { this.loading = true
this.form = report const { report, userScores } = await this.$get(`${this.api.reportDetail}?reportId=${this.reportId}`)
this.expData = userScores this.form = report
this.project = this.expData.find(e => e.lcRuleRecords) // lcRuleRecords this.expData = userScores
let form = this.form; this.project = this.expData.find(e => e.lcRuleRecords) // lcRuleRecords
this.infoData = { let form = this.form;
workNumber: form.workNumber, this.infoData = {
experimentalClassName: form.experimentalClassName, workNumber: form.workNumber,
instructor: form.instructor, experimentalClassName: form.experimentalClassName,
period: form.period, instructor: form.instructor,
laboratory: form.laboratory, period: form.period,
submitTime: form.submitTime, laboratory: form.laboratory,
score: form.score, submitTime: form.submitTime,
userName: form.userName, score: form.score,
className: form.className userName: form.userName,
} className: form.className
const data = report.data }
this.userScores = userScores const data = report.data
// data使 this.userScores = userScores
if (!data) { // data使
this.handleList(userScores) if (!data) {
this.$post(this.api.editExperimentalData, { this.handleList(userScores)
reportId, this.$post(this.api.editExperimentalData, {
data: JSON.stringify(userScores) reportId,
}).then(res => { }).catch(err => { }) data: JSON.stringify(userScores)
} else { }).then(res => { }).catch(err => { })
this.handleList(userScores.find(e => e.lcRuleRecords) ? userScores : JSON.parse(data)) } else {
} this.handleList(userScores.find(e => e.lcRuleRecords) ? userScores : JSON.parse(data))
}).catch(res => { }) }
}, },
// //
handleList (list) { handleList (list) {
@ -299,6 +300,7 @@ export default {
}) })
} }
this.expData = list this.expData = list
this.loading = false
}, },
exportPage () { exportPage () {
const form = Object.assign(this.form, this.infoData) const form = Object.assign(this.form, this.infoData)

@ -1,5 +1,6 @@
<template> <template>
<div class="page"> <div class="page"
v-loading="loading">
<h6 class="p-title">筛选</h6> <h6 class="p-title">筛选</h6>
<div class="tool mul"> <div class="tool mul">
<ul class="filter"> <ul class="filter">
@ -91,8 +92,7 @@
</div> </div>
</div> </div>
<el-table v-loading="listLoading" <el-table ref="table"
ref="table"
:data="listData" :data="listData"
class="table" class="table"
stripe stripe
@ -297,7 +297,7 @@ export default {
total: 0, // total: 0, //
listData: [], // listData: [], //
multipleSelection: [], // multipleSelection: [], //
listLoading: false,// loading: false,//
ticker: null, // ticker: null, //
now: '', now: '',
}; };
@ -383,7 +383,7 @@ export default {
} }
}, },
getData (counddown) { getData (counddown) {
this.listLoading = true; this.loading = true;
const { mallIds } = this const { mallIds } = this
// const cur = this.curs.find(e => e.mallId == mallIds[0]) // const cur = this.curs.find(e => e.mallId == mallIds[0])
let data = { let data = {
@ -422,9 +422,9 @@ export default {
} }
}); });
counddown && this.beginTimer() counddown && this.beginTimer()
this.listLoading = false; this.loading = false;
}).catch(err => { }).catch(err => {
this.listLoading = false; this.loading = false;
}); });
}, },
initData () { initData () {

@ -1,6 +1,7 @@
<template> <template>
<div> <div>
<div class="page"> <div class="page"
v-loading="loading">
<h6 class="p-title">筛选</h6> <h6 class="p-title">筛选</h6>
<div class="tool mul"> <div class="tool mul">
<ul class="filter"> <ul class="filter">
@ -78,7 +79,6 @@
<script> <script>
import Setting from "@/setting"; import Setting from "@/setting";
import util from "@/libs/util"; import util from "@/libs/util";
import Cookie from 'js-cookie'
export default { export default {
data () { data () {
return { return {
@ -112,7 +112,8 @@ export default {
1: '默认' 1: '默认'
}, },
pageNo: +this.$route.query.page || 1, pageNo: +this.$route.query.page || 1,
pageSize: 10 pageSize: 10,
loading: false,
}; };
}, },
watch: { watch: {
@ -132,6 +133,7 @@ export default {
this.getData(); this.getData();
}, },
getData () { getData () {
this.loading = true
let data = { let data = {
type: this.systemType, type: this.systemType,
systemName: this.systemSearch, systemName: this.systemSearch,
@ -141,7 +143,9 @@ export default {
this.$post(this.api.getSystemByCustomers, data).then(({ data }) => { this.$post(this.api.getSystemByCustomers, data).then(({ data }) => {
this.systemData = data.records; this.systemData = data.records;
this.totals = data.total; this.totals = data.total;
this.loading = false
}).catch(res => { }).catch(res => {
this.loading = false
}); });
}, },
handleCurrentChange (val) { handleCurrentChange (val) {

@ -1,5 +1,6 @@
<template> <template>
<div class="page"> <div class="page"
v-loading="loading">
<h6 class="p-title">筛选</h6> <h6 class="p-title">筛选</h6>
<div class="tool mul"> <div class="tool mul">
<ul class="filter"> <ul class="filter">
@ -75,7 +76,6 @@
stripe stripe
header-align="center" header-align="center"
@selection-change="handleSelectionChange" @selection-change="handleSelectionChange"
v-loading="loading"
row-key="id"> row-key="id">
<el-table-column type="selection" <el-table-column type="selection"
width="55" width="55"
@ -219,7 +219,6 @@
import util from "@/libs/util"; import util from "@/libs/util";
import Setting from "@/setting"; import Setting from "@/setting";
import { mapMutations } from "vuex"; import { mapMutations } from "vuex";
import { Loading } from 'element-ui'
import Bus from '@/libs/bus' import Bus from '@/libs/bus'
export default { export default {
name: "match", name: "match",

@ -381,12 +381,12 @@ export default {
stageId: this.stageId, stageId: this.stageId,
isNakadai: 1 isNakadai: 1
}) })
this.loading = false
this.total = page.total this.total = page.total
this.list = page.records this.list = page.records
this.statData = data this.statData = data
this.avgScore = (+data.avgScore).toFixed(2) this.avgScore = (+data.avgScore).toFixed(2)
this.getChart() this.method != 2 && this.getChart()
this.loading = false
} }
}, },
initData () { initData () {

@ -11,6 +11,7 @@
</el-card> </el-card>
<el-card shadow="hover" <el-card shadow="hover"
v-loading="loading"
class="m-b-20"> class="m-b-20">
<div class="tabs"> <div class="tabs">
<template v-for="(item, i) in grades"> <template v-for="(item, i) in grades">
@ -60,7 +61,6 @@
ref="table" ref="table"
stripe stripe
row-key="scoreId" row-key="scoreId"
v-loading="loading"
@selection-change="handleSelectionChange" @selection-change="handleSelectionChange"
header-align="center"> header-align="center">
<el-table-column type="selection" <el-table-column type="selection"
@ -372,6 +372,7 @@ export default {
}, },
// //
getRank () { getRank () {
this.loading = true
// //
if (this.type) { if (this.type) {
this.$post(this.api.manuallyUploadedRankings, { this.$post(this.api.manuallyUploadedRankings, {
@ -389,7 +390,9 @@ export default {
this.total = message.total this.total = message.total
this.getPublishTime() this.getPublishTime()
this.loading = false this.loading = false
}).catch(res => { }) }).catch(res => {
this.loading = false
})
} else { // } else { //
if (!this.active) { if (!this.active) {
// //
@ -408,7 +411,9 @@ export default {
this.total = total this.total = total
this.getPublishTime() this.getPublishTime()
this.loading = false this.loading = false
}).catch(res => { }) }).catch(res => {
this.loading = false
})
} else { // } else { //
this.$post(`${this.api.stageRaceRanking}?competitionId=${this.id}&stageId=${this.active}&pageNum=${this.page}&pageSize=${this.pageSize}&publicationType=${this.type}&keyword=${this.keyword}`).then(({ page, total, publishStatus }) => { this.$post(`${this.api.stageRaceRanking}?competitionId=${this.id}&stageId=${this.active}&pageNum=${this.page}&pageSize=${this.pageSize}&publicationType=${this.type}&keyword=${this.keyword}`).then(({ page, total, publishStatus }) => {
this.published = publishStatus this.published = publishStatus
@ -416,7 +421,9 @@ export default {
this.total = total this.total = total
this.getPublishTime() this.getPublishTime()
this.loading = false this.loading = false
}).catch(res => { }) }).catch(res => {
this.loading = false
})
} }
} }
}, },
@ -442,8 +449,8 @@ export default {
} }
}, },
// //
typeChange (val) { async typeChange (val) {
this.$post(`${this.api.toggleTheSortingMode}?competitionId=${this.id}&stageId=${this.active || this.stageId}&isOverallRanking=${this.active ? 0 : 1}&whetherToManuallyPublish=${this.type}`).then(res => { }).catch(res => { }) await this.$post(`${this.api.toggleTheSortingMode}?competitionId=${this.id}&stageId=${this.active || this.stageId}&isOverallRanking=${this.active ? 0 : 1}&whetherToManuallyPublish=${this.type}`)
this.getRank() this.getRank()
}, },
initData () { initData () {

@ -53,6 +53,7 @@
header-align="center" header-align="center"
@selection-change="handleSelectionChange" @selection-change="handleSelectionChange"
row-key="id" row-key="id"
v-loading="loading"
@sort-change="sortChange"> @sort-change="sortChange">
<el-table-column type="selection" <el-table-column type="selection"
width="80" width="80"
@ -437,6 +438,7 @@ export default {
diffSchool: false, diffSchool: false,
uploading: false, uploading: false,
exporting: false, exporting: false,
loading: false,
}; };
}, },
watch: { watch: {
@ -458,8 +460,9 @@ export default {
this.getTeam() this.getTeam()
this.getClient() this.getClient()
}, },
getData () { async getData () {
this.$post(this.api.queryRegistrationByCondition, { this.loading = true
const { data } = await this.$post(this.api.queryRegistrationByCondition, {
pageNum: this.page, pageNum: this.page,
pageSize: this.pageSize, pageSize: this.pageSize,
competitionId: this.id, competitionId: this.id,
@ -467,18 +470,17 @@ export default {
isDisable: this.isDisable, isDisable: this.isDisable,
schoolOrder: this.schoolOrder, schoolOrder: this.schoolOrder,
teamOrder: this.teamOrder, teamOrder: this.teamOrder,
}).then(({ data }) => { })
const list = data.records; const list = data.records;
list.map(e => { list.map(e => {
if (e.teacherDetails) { if (e.teacherDetails) {
e.teachers = JSON.parse(e.teacherDetails) e.teachers = JSON.parse(e.teacherDetails)
} }
}) })
this.listData = list this.listData = list
this.total = data.total; this.total = data.total;
this.$refs.table.clearSelection(); this.$refs.table.clearSelection();
}).catch(res => { this.loading = false
});
}, },
// //
getInfo () { getInfo () {
@ -718,7 +720,6 @@ export default {
this.$refs.form.validate((valid) => { this.$refs.form.validate((valid) => {
if (valid) { if (valid) {
if (this.submiting) return false if (this.submiting) return false
this.submiting = true
const { form } = this const { form } = this
const team = this.teams.find(e => e.teamId == form.teamId) const team = this.teams.find(e => e.teamId == form.teamId)
if (team && team.invitationCode) form.invitationCode = team.invitationCode if (team && team.invitationCode) form.invitationCode = team.invitationCode

@ -194,7 +194,6 @@
</template> </template>
<script> <script>
import { Loading } from "element-ui";
import Setting from "@/setting"; import Setting from "@/setting";
export default { export default {
data () { data () {
@ -301,7 +300,6 @@ export default {
}, },
// //
getData () { getData () {
// this.loadIns = Loading.service()
this.$post(this.api.websiteProductList, { this.$post(this.api.websiteProductList, {
...this.form, ...this.form,
pageNum: this.page, pageNum: this.page,

@ -1,6 +1,7 @@
<template> <template>
<div ref="main" <div ref="main"
class="main"> class="main"
v-loading="loading">
<el-form :disabled="isDetail"> <el-form :disabled="isDetail">
<el-card shadow="hover" <el-card shadow="hover"
class="m-b-20"> class="m-b-20">
@ -359,7 +360,8 @@ export default {
submiting: false, // submiting: false, //
updateTime: 0, updateTime: 0,
next: null, next: null,
backType: false backType: false,
loading: false,
}; };
}, },
computed: { computed: {
@ -448,6 +450,7 @@ export default {
"setSystemId", "setProject" "setSystemId", "setProject"
]), ]),
getInfoData () { // getInfoData () { //
this.loading = true
this.$get(`${this.api.getProjectDetail}?projectId=${this.projectId}`).then(res => { this.$get(`${this.api.getProjectDetail}?projectId=${this.projectId}`).then(res => {
let { projectManage, projectJudgmentVos } = res; let { projectManage, projectJudgmentVos } = res;
const { mallId, systemId } = projectManage const { mallId, systemId } = projectManage
@ -464,12 +467,13 @@ export default {
this.projectJudgmentData.forEach((e, i) => { this.projectJudgmentData.forEach((e, i) => {
e.sort = i + 1; e.sort = i + 1;
}); });
this.loading = false
this.$nextTick(() => { this.$nextTick(() => {
this.$refs.main.scrollTop = 0; this.$refs.main.scrollTop = 0;
this.updateTime = 0 this.updateTime = 0
}); });
}).catch(err => { }).catch(err => {
console.log(err); this.loading = false
}); });
}, },
// //
@ -484,7 +488,6 @@ export default {
e.children = data.filter(n => e.systemId.split(',').includes(n.id + '')) // e.children = data.filter(n => e.systemId.split(',').includes(n.id + '')) //
}) })
this.curs = res.data this.curs = res.data
console.log("🚀 ~ file: index.vue:431 ~ getSystemData ~ res.data:", res.data)
} }
}, },
// //

Loading…
Cancel
Save