From 0f823d771d6a876c8990ad5b7dd80c835c38c53f Mon Sep 17 00:00:00 2001 From: xiangpei <xiangpei@timesnew.cn> Date: 星期四, 06 六月 2024 15:52:46 +0800 Subject: [PATCH] 班级学员新增、修改 --- src/views/Manage/TestPaper/QuestionBank.vue | 392 +++++++++++++++++++++++++++++-------------------------- 1 files changed, 207 insertions(+), 185 deletions(-) diff --git a/src/views/Manage/TestPaper/QuestionBank.vue b/src/views/Manage/TestPaper/QuestionBank.vue index b4f6d6b..a8d238d 100644 --- a/src/views/Manage/TestPaper/QuestionBank.vue +++ b/src/views/Manage/TestPaper/QuestionBank.vue @@ -8,247 +8,271 @@ <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" :header-cell-style="getRowClass" :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 + }) + }, + callback() { + this.gapVisible = false; + this.multipleVisible = false; + this.shortVisible = false; + this.singleVisible = false; + this.truesVisible = false; + this.search() + }, + // 鑾峰彇鍒楄〃 + 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 + }) }, // 淇敼琛ㄥ崟澶撮儴鐨勯鑹� getRowClass() { return "background:#d2d3d6"; }, - - // 鐢熸垚璇曞嵎 - getCreate() { - // 璺宠浆鍒扮敓鎴愰〉闈� - //璺宠浆鍒板搴旂殑绠$悊椤甸潰 - this.$router.push({ - path: "/manage/test-paper-generation", - }); - }, - // 鐐瑰嚮鍚庤皟鐢ㄥ脊绐楃粍浠剁殑鏂规硶,寮�鍚脊绐� - 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 +282,3 @@ border-radius: 10px; } </style> - - -- Gitblit v1.8.0