From 241255fbe2b6db3b2ed263f1e5a9956f5f9a0ee2 Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期二, 11 六月 2024 11:40:58 +0800
Subject: [PATCH] 考试管理
---
src/views/Manage/TestPaper/QuestionBank.vue | 391 +++++++++++++++++++++++++++++--------------------------
1 files changed, 204 insertions(+), 187 deletions(-)
diff --git a/src/views/Manage/TestPaper/QuestionBank.vue b/src/views/Manage/TestPaper/QuestionBank.vue
index b4f6d6b..83dd0eb 100644
--- a/src/views/Manage/TestPaper/QuestionBank.vue
+++ b/src/views/Manage/TestPaper/QuestionBank.vue
@@ -8,247 +8,266 @@
<div class="content">
<!-- 璇曞嵎鐢熸垚鎸夐挳 -->
<div style="padding-bottom:20px; border-bottom: 3px solid #409EFF;margin-bottom: 20px;">
- <el-button
- type="primary"
- @click="getDialogFormVisible"
- >褰曞叆棰樼洰</el-button>
+ <el-popover placement="bottom" trigger="click">
+ <el-button type="warning" size="mini" v-for="item in editUrlEnum" :key="item.key"
+ @click="getDialogFormVisible(item.name)">{{ item.name }}
+ </el-button>
+ <el-button slot="reference" type="primary" class="link-left">鏂板</el-button>
+ </el-popover>
</div>
<!-- 鎼滅储 -->
<div>
- <el-form
- :inline="true"
- :model="formLabelAlign"
- class="demo-form-inline"
- label-width="80px"
- >
+ <el-form :inline="true" :model="queryParam" class="demo-form-inline" label-width="80px">
<el-form-item>
- <el-input
- v-model="formLabelAlign.type"
- placeholder="棰樼洰鍚�"
- ></el-input>
+ <el-input v-model="queryParam.content" placeholder="璇疯緭鍏ラ鐩�" clearable></el-input>
</el-form-item>
<el-form-item>
- <el-select
- v-model="formLabelAlign.region"
- placeholder="鍏ㄩ儴绉戠洰"
- >
- <el-option
- label="鍏ㄩ儴绉戠洰"
- value="shanghai"
- ></el-option>
- <el-option
- label="璇枃"
- value="beijing"
- ></el-option>
- <el-option
- label="鏁板"
- value="beijing"
- ></el-option>
- <el-option
- label="鑻辫"
- value="beijing"
- ></el-option>
+ <el-select v-model="queryParam.subjectId" placeholder="璇烽�夋嫨绉戠洰" clearable multiple @change="search">
+ <el-option v-for="item in subjects" :key="item.id" :value="item.id" :label="item.name"></el-option>
</el-select>
</el-form-item>
<el-form-item>
- <el-select
- v-model="formLabelAlign.region"
- placeholder="閫夋嫨棰�"
- >
- <el-option
- label="閫夋嫨棰�"
- value="shanghai"
- ></el-option>
- <el-option
- label="闂瓟棰�"
- value="beijing"
- ></el-option>
- <el-option
- label="鍒ゆ柇棰�"
- value="beijing"
- ></el-option>
+ <el-select v-model="queryParam.questionType" placeholder="璇烽�夋嫨棰樺瀷" clearable multiple @change="search">
+ <el-option v-for="item in questionTypeEnum" :key="item.key" :value="item.key"
+ :label="item.value"></el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item>
+ <el-select v-model="queryParam.status" placeholder="璇烽�夋嫨鐘舵��" clearable @change="search">
+ <el-option value="1" label="鍚敤"></el-option>
+ <el-option value="2" label="绂佺敤"></el-option>
</el-select>
</el-form-item>
- <el-form-item label="">
- <el-button
- style="width:100px;"
- type="primary"
- size="small"
- >鏌ヨ</el-button>
+ <el-form-item>
+ <el-button style="width:100px;" type="primary" size="small" @click="search()">鏌ヨ</el-button>
</el-form-item>
</el-form>
</div>
<!-- 琛ㄦ牸 -->
- <el-table
- :header-cell-style="getRowClass"
- :data="tableData"
- border
- style="width: 100%;"
- >
- <el-table-column
- align="center"
- prop="title"
- label="棰樼洰鍚�"
- >
+ <el-table v-loading="listLoading" :data="tableData" border style="width: 100%;">
+ <el-table-column align="center" prop="shortTitle" label="棰樼洰" show-overflow-tooltip>
</el-table-column>
- <el-table-column
- align="center"
- prop="subject"
- label="绉戠洰"
- >
+ <el-table-column align="center" prop="subjectName" label="绉戠洰" width="150px">
</el-table-column>
- <el-table-column
- align="center"
- prop="type"
- label="棰樼洰绫诲瀷"
- >
+ <el-table-column align="center" prop="questionTypeName" label="棰樺瀷" width="100px">
</el-table-column>
- <el-table-column
- align="center"
- prop="score"
- label="鍙傝�冪瓟妗�"
- >
+ <el-table-column align="center" prop="difficult" label="闅惧害" width="60px" />
+ <el-table-column align="center" prop="createTime" label="鍒涘缓鏃堕棿" width="160px" />
+ <el-table-column label="鐘舵��" prop="status" width="70px">
+ <template slot-scope="{row}">
+ <el-tag :type="row.status === '绂佺敤' ? 'danger' : 'success'">
+ {{ row.status ? row.status : '鍚敤' }}
+ </el-tag>
+ </template>
</el-table-column>
- <el-table-column
- label="鎿嶄綔"
- align="center"
- >
- <el-button type="text">缂栬緫</el-button>
- <el-button type="text">鍒犻櫎</el-button>
+ <el-table-column label="鎿嶄綔" align="center" width="300px">
+ <template slot-scope="{row}">
+ <el-button size="mini" @click="showQuestion(row)">棰勮</el-button>
+ <el-button size="mini" @click="editQuestion(row)">缂栬緫</el-button>
+ <el-button size="mini" type="primary" @click="statusQuestion(row)">{{ row.status === "绂佺敤" ? "鍚敤" : "绂佺敤"
+ }}</el-button>
+ <el-popconfirm title="纭鍒犻櫎鍚�" @confirm="deleteQuestion(row)">
+ <el-button slot="reference" size="mini" type="danger" class="link-left">鍒犻櫎</el-button>
+ </el-popconfirm>
+ </template>
</el-table-column>
</el-table>
- <div
- class="block"
- style="display: flex; margin-top: 40px;"
- >
- <el-pagination
- style="margin:auto"
- background
- :page-size="10"
- layout="prev, pager, next, jumper"
- :total="100"
- >
- </el-pagination>
- </div>
+ <pagination v-show="total > 0" :total="total" :page.sync="queryParam.pageIndex"
+ :limit.sync="queryParam.pageSize" @pagination="search" />
</div>
</div>
-
</div>
- <PopUp
- ref="popUp"
- @children="parentGoods"
- />
+
+ <!-- 濉┖ -->
+ <el-dialog :visible.sync="gapVisible" :close-on-click-modal="false" v-if="gapVisible">
+ <gap ref="gap" @children="parentGoods" @callback="callback" :id="updateId" />
+ </el-dialog>
+ <!-- 澶氶�� -->
+ <el-dialog :visible.sync="multipleVisible" :close-on-click-modal="false" v-if="multipleVisible">
+ <multiple ref="multiple" @children="parentGoods" @callback="callback" :id="updateId" />
+ </el-dialog>
+ <!-- 绠�绛� -->
+ <el-dialog :visible.sync="shortVisible" :close-on-click-modal="false" v-if="shortVisible">
+ <short ref="short" @children="parentGoods" @callback="callback" :id="updateId" />
+ </el-dialog>
+ <!-- 鍗曢�� -->
+ <el-dialog :visible.sync="singleVisible" :close-on-click-modal="false" v-if="singleVisible">
+ <single ref="single" @children="parentGoods" @callback="callback" :id="updateId" />
+ </el-dialog>
+ <!-- 鍒ゆ柇 -->
+ <el-dialog :visible.sync="truesVisible" :close-on-click-modal="false" v-if="truesVisible">
+ <trues ref="trues" @children="parentGoods" @callback="callback" :id="updateId" />
+ </el-dialog>
+
+ <el-dialog :visible.sync="questionShow.dialog" style="width: 100%;height: 100%">
+ <QuestionShow :qType="questionShow.qType" :question="questionShow.question" :qLoading="questionShow.loading" />
+ </el-dialog>
</div>
</template>
<script>
// 寮曞叆褰堝嚭绐楀彛绲勪欢
-import PopUp from "../../../components/PopUp/Question.vue";
+import gap from "@/components/PopUp/gap-filling.vue";
+import multiple from "@/components/PopUp/multiple-choice.vue";
+import short from "@/components/PopUp/short-answer.vue";
+import single from "@/components/PopUp/single-choice.vue";
+import trues from "@/components/PopUp/true-false.vue";
+import { mapGetters, mapState } from 'vuex'
+import questionApi from '@/api/question'
+import QuestionShow from '@/components/PopUp/question/Show'
+import subjectApi from '@/api/subject'
+import Pagination from '@/components/Pagination'
+
export default {
// 娉ㄥ唽
components: {
- PopUp,
+ gap,
+ multiple,
+ short,
+ single,
+ trues,
+ QuestionShow,
+ Pagination
},
data() {
return {
- formLabelAlign: {
- type: "",
- user: "",
- region: "",
+ updateId: '',
+ questionShow: {
+ qType: 0,
+ dialog: false,
+ question: null,
+ loading: false
},
- tableData: [
- {
- title: "褰揂涓嶣涓�璧蜂慨璺�",
- type: "閫夋嫨棰�",
- subject: "璇枃",
- score: ["A"],
- },
- {
- title: "褰揂涓嶣涓�璧蜂慨璺�",
- type: "閫夋嫨棰�",
- subject: "璇枃",
- score: ["A"],
- },
- {
- title: "褰揂涓嶣涓�璧蜂慨璺�",
- type: "閫夋嫨棰�",
- subject: "璇枃",
- score: ["A"],
- },
- {
- title: "褰揂涓嶣涓�璧蜂慨璺�",
- type: "閫夋嫨棰�",
- subject: "璇枃",
- score: ["A", "B"],
- },
- {
- title: "褰揂涓嶣涓�璧蜂慨璺�",
- type: "閫夋嫨棰�",
- subject: "璇枃",
- score: ["A"],
- },
- {
- title: "褰揂涓嶣涓�璧蜂慨璺�",
- type: "閫夋嫨棰�",
- subject: "璇枃",
- score: ["A"],
- },
- {
- title: "褰揂涓嶣涓�璧蜂慨璺�",
- type: "閫夋嫨棰�",
- subject: "璇枃",
- score: ["A"],
- },
- {
- title: "褰揂涓嶣涓�璧蜂慨璺�",
- type: "閫夋嫨棰�",
- subject: "璇枃",
- score: ["A"],
- },
- {
- title: "褰揂涓嶣涓�璧蜂慨璺�",
- type: "閫夋嫨棰�",
- subject: "璇枃",
- score: ["A"],
- },
- ],
+ listLoading: true,
+ queryParam: {
+ questionType: [],
+ subjectId: [],
+ content: '',
+ status: '',
+ pageIndex: 1,
+ pageSize: 10
+ },
+ total: 0,
+ gapVisible: false,
+ multipleVisible: false,
+ shortVisible: false,
+ singleVisible: false,
+ truesVisible: false,
+ tableData: [],
+ subjects: []
};
},
+ created() {
+ this.search()
+ this.getSubjects();
+ },
methods: {
- // 杩斿洖涓婁竴涓〉闈�
- goBack() {
- this.$router.back();
+ // 鑾峰彇绉戠洰
+ getSubjects() {
+ subjectApi.list().then(re => {
+ this.subjects = re.data
+ })
},
- // 淇敼琛ㄥ崟澶撮儴鐨勯鑹�
- getRowClass() {
- return "background:#d2d3d6";
+ callback() {
+ this.gapVisible = false;
+ this.multipleVisible = false;
+ this.shortVisible = false;
+ this.singleVisible = false;
+ this.truesVisible = false;
+ this.search()
},
-
- // 鐢熸垚璇曞嵎
- getCreate() {
- // 璺宠浆鍒扮敓鎴愰〉闈�
- //璺宠浆鍒板搴旂殑绠$悊椤甸潰
- this.$router.push({
- path: "/manage/test-paper-generation",
- });
+ // 鑾峰彇鍒楄〃
+ search() {
+ this.listLoading = true
+ questionApi.pageList(this.queryParam).then(re => {
+ this.tableData = re.data.list
+ this.total = re.data.total
+ this.queryParam.pageSize = re.data.pageSize
+ this.queryParam.pageIndex = re.data.pageNum
+ this.listLoading = false
+ })
},
-
// 鐐瑰嚮鍚庤皟鐢ㄥ脊绐楃粍浠剁殑鏂规硶,寮�鍚脊绐�
- getDialogFormVisible() {
- this.$refs.popUp.showDialog();
+ getDialogFormVisible(value) {
+ switch (value) {
+ case "濉┖棰�":
+ this.gapVisible = true;
+ break;
+ case "澶氶�夐":
+ this.multipleVisible = true;
+ break;
+ case "绠�绛旈":
+ this.shortVisible = true;
+ break;
+ case "鍗曢�夐":
+ this.singleVisible = true;
+ break;
+ case "鍒ゆ柇棰�":
+ this.truesVisible = true;
+ break;
+ }
+ this.updateId = '';
},
// 寮圭獥
// 鎺ユ敹寮圭獥缁勪欢杩斿洖鐨勮〃鍗曞��
parentGoods(obj) {
console.log(obj, "寮圭獥缁勪欢鐨勮〃鍗曞��");
},
+ showQuestion(row) {
+ let _this = this
+ this.questionShow.dialog = true
+ this.questionShow.loading = true
+ questionApi.select(row.id).then(re => {
+ _this.questionShow.qType = re.data.questionType
+ _this.questionShow.question = re.data
+ _this.questionShow.loading = false
+ })
+ },
+ editQuestion(row) {
+ this.getDialogFormVisible(row.questionTypeName);
+ this.updateId = row.id;
+ },
+ statusQuestion(row) {
+ let question = {
+ id: row.id,
+ status: row.status === '绂佺敤' ? '鍚敤' : '绂佺敤'
+ }
+ questionApi.updateStatus(question).then(re => {
+ if (re.code === 1) {
+ this.$message.success(re.message)
+ this.search()
+ } else {
+ this.$message.error(re.message)
+ }
+ })
+ },
+ deleteQuestion(row) {
+ let _this = this
+ questionApi.deleteQuestion(row.id).then(re => {
+ if (re.code === 1) {
+ _this.search()
+ _this.$message.success(re.message)
+ } else {
+ _this.$message.error(re.message)
+ }
+ })
+ },
},
+ computed: {
+ ...mapGetters('enumItem', ['enumFormat']),
+ ...mapState('enumItem', {
+ questionTypeEnum: state => state.exam.question.typeEnum,
+ editUrlEnum: state => state.exam.question.editUrlEnum
+ }),
+ ...mapGetters('exam', ['subjectEnumFormat']),
+ }
};
</script>
<style scoped lang="scss">
.flex {
display: flex;
}
+
// 鍐呭
.content {
width: 1262px;
@@ -258,5 +277,3 @@
border-radius: 10px;
}
</style>
-
-
--
Gitblit v1.8.0