123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290 |
- <template>
- <div class="exam-management">
- <div class="part-box-head">
- <div class="part-box-head-left"><h1>批次管理</h1></div>
- </div>
- <div class="part-filter">
- <div class="part-filter-form">
- <el-form :model="form" inline>
- <el-form-item label="批次名称">
- <el-input
- v-model.trim="form.name"
- placeholder="输入批次名称"
- ></el-input>
- </el-form-item>
- <el-form-item label="类型">
- <ExamTypeSelect v-model="form.mode"></ExamTypeSelect>
- </el-form-item>
- <el-form-item label="状态">
- <StateSelect v-model="form.enableState"></StateSelect>
- </el-form-item>
- <el-form-item>
- <el-button type="primary" @click="handleCurrentChange(0)"
- >查询</el-button
- >
- </el-form-item>
- </el-form>
- <div class="part-filter-form-action">
- <el-button type="primary" icon="icon icon-add" @click="add"
- >新增</el-button
- >
- <el-button type="primary" icon="icon icon-copy" @click="copy"
- >复制</el-button
- >
- </div>
- </div>
- </div>
- <el-table ref="table" :data="tableData">
- <el-table-column type="selection" width="42" />
- <el-table-column width="100" label="ID">
- <span slot-scope="scope">{{ scope.row.id }}</span>
- </el-table-column>
- <el-table-column width="200" label="批次编码">
- <span slot-scope="scope">{{ scope.row.code }}</span>
- </el-table-column>
- <el-table-column width="200" label="批次名称">
- <span slot-scope="scope">{{ scope.row.name }}</span>
- </el-table-column>
- <el-table-column label="模式">
- <span slot-scope="scope">{{ scope.row.mode | modeFilter }}</span>
- </el-table-column>
- <el-table-column width="120" label="状态">
- <span slot-scope="scope">{{
- scope.row.enable | zeroOneEnableDisableFilter
- }}</span>
- </el-table-column>
- <el-table-column width="100" label="开始时间">
- <span slot-scope="scope">{{
- scope.row.startTime | datetimeFilter
- }}</span>
- </el-table-column>
- <el-table-column width="100" label="结束时间">
- <span slot-scope="scope">{{ scope.row.endTime | datetimeFilter }}</span>
- </el-table-column>
- <el-table-column width="100" label="监考状态">
- <span slot-scope="scope">{{
- scope.row.monitorStatus | monitorStatusFilter
- }}</span>
- </el-table-column>
- <el-table-column width="100" label="算分进度">
- <span slot-scope="scope">
- <div class="text-center">{{ scope.row.progress }}%</div>
- <el-progress
- type="line"
- :show-text="false"
- :stroke-width="12"
- :percentage="scope.row.progress"
- ></el-progress
- ></span>
- </el-table-column>
- <el-table-column width="120" label="更新人">
- <span slot-scope="scope">{{ scope.row.updateName }}</span>
- </el-table-column>
- <el-table-column width="100" label="更新时间">
- <span slot-scope="scope">{{
- scope.row.updateTime | datetimeFilter
- }}</span>
- </el-table-column>
- <el-table-column :context="_self" label="操作" width="220" fixed="right">
- <div slot-scope="scope">
- <el-button
- size="mini"
- type="primary"
- plain
- @click="toggleEnableExam(scope.row)"
- >
- {{ !scope.row.enable | booleanEnableDisableFilter }}
- </el-button>
- <el-button size="mini" type="primary" plain @click="edit(scope.row)">
- 编辑
- </el-button>
- <el-button
- size="mini"
- type="primary"
- plain
- @click="pushExam(scope.row)"
- >推送</el-button
- >
- <div class="mb-2"></div>
- <el-button
- size="mini"
- type="primary"
- plain
- @click="editActivities(scope.row)"
- v-if="scope.row.mode === 'TOGETHER'"
- >
- 场次设置
- </el-button>
- <span v-if="scope.row.mode === 'TOGETHER'" class="ml-2"></span>
- <el-badge
- :value="scope.row.scoreStatus === 'NEED_CALCULATE' ? 'new' : ''"
- >
- <el-button
- size="mini"
- type="primary"
- @click="reCalcBtn(scope.row)"
- plain
- :loading="scope.row.scoreStatus === 'CALCULATING'"
- >
- {{
- scope.row.scoreStatus === "CALCULATING"
- ? "正在算分"
- : "重新算分"
- }}
- </el-button>
- </el-badge>
- </div>
- </el-table-column>
- </el-table>
- <div class="part-page">
- <el-pagination
- background
- @current-change="handleCurrentChange"
- :current-page="currentPage"
- :page-size="pageSize"
- :page-sizes="[10, 20, 50, 100, 200, 300]"
- @size-change="handleSizeChange"
- layout="total, sizes, prev, pager, next, jumper"
- :total="total"
- />
- </div>
- <CopyExamDialog ref="theDialog" :exam="selected" @reload="searchForm" />
- <PushSetDialog ref="PushSetDialog" :exam-id="curExamId" />
- </div>
- </template>
- <script>
- import StateSelect from "@/components/StateSelect";
- import ExamTypeSelect from "@/components/ExamTypeSelect";
- import { searchExams, toggleEnableExam, reCalcExam } from "@/api/examwork-exam";
- import CopyExamDialog from "./CopyExamDialog";
- import PushSetDialog from "./PushSetDialog.vue";
- export default {
- name: "ExamManagement",
- components: {
- StateSelect,
- ExamTypeSelect,
- CopyExamDialog,
- PushSetDialog,
- },
- data() {
- return {
- form: {
- orgId: "",
- roleCode: "",
- loginName: "",
- name: "",
- enableState: null,
- },
- tableData: [],
- currentPage: 1,
- pageSize: 10,
- total: 10,
- selected: null,
- curExamId: null,
- };
- },
- created() {
- this.searchForm();
- },
- // activated() {
- // console.log("im activated");
- // },
- // deactivated() {
- // console.log("im deactivated");
- // },
- beforeRouteEnter(to, from, next) {
- if (from.name === "ExamEdit") {
- next((vm) => vm.$nextTick(() => vm.searchForm()));
- } else {
- next();
- }
- },
- methods: {
- async searchForm() {
- const res = await searchExams({
- enable: this.form.enableState,
- name: this.form.name,
- mode: this.form.mode,
- pageNumber: this.currentPage,
- pageSize: this.pageSize,
- });
- this.tableData = res.data.data.records;
- this.total = res.data.data.total;
- if (this.total > 0 && this.tableData.length === 0) {
- this.handleCurrentChange(this.currentPage - 1);
- }
- },
- handleCurrentChange(val) {
- this.currentPage = val;
- this.searchForm();
- },
- handleSizeChange(val) {
- this.pageSize = val;
- this.currentPage = 1;
- this.searchForm();
- },
- add() {
- this.$router.push("/exam/edit/");
- },
- edit(exam) {
- this.$router.push("/exam/edit/" + exam.id);
- },
- async toggleEnableExam(exam) {
- await toggleEnableExam({
- id: exam.id,
- enable: exam.enable === 0 ? 1 : 0,
- });
- this.searchForm();
- },
- async copy() {
- let rows = this.$refs.table.selection;
- if (rows.length !== 1) {
- this.$notify({
- type: "warning",
- title: rows.length === 0 ? "请选择一个批次" : "请仅选择一个批次",
- });
- return;
- }
- this.selected = rows[0];
- this.$refs.theDialog.openDialog();
- },
- editActivities(exam) {
- window.sessionStorage.setItem(
- "examInfo",
- JSON.stringify({ examName: exam.name, examCode: exam.code })
- );
- this.$router.push({
- name: "ActivityManagement",
- params: { examId: exam.id },
- });
- },
- reCalcBtn(exam) {
- this.$confirm(
- `<div>批次ID:${exam.id}</div><div>批次名称:${exam.name}</div>`,
- "是否重新计算该批次成绩?",
- {
- confirmButtonText: "确定",
- cancelButtonText: "取消",
- type: "warning",
- dangerouslyUseHTMLString: true,
- }
- )
- .then(() => {
- reCalcExam(exam.id);
- this.$message({
- type: "success",
- message: "重新算分任务已启动!",
- });
- })
- .catch(() => {});
- },
- pushExam(exam) {
- this.curExamId = exam.id;
- this.$refs.PushSetDialog.open();
- },
- },
- };
- </script>
|