src/api/question.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/components/PopUp/gap-filling.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/components/PopUp/multiple-choice.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/components/PopUp/question/Show.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/components/PopUp/short-answer.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/components/PopUp/single-choice.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/components/PopUp/true-false.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/Manage/TestPaper/QuestionBank.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/api/question.js
@@ -3,6 +3,7 @@ export default { pageList: query => post('/api/admin/question/page', query), edit: query => post('/api/admin/question/edit', query), updateStatus: query => post('/api/admin/question/status', query), select: id => post('/api/admin/question/select/' + id), deleteQuestion: id => post('/api/admin/question/delete/' + id) } src/components/PopUp/gap-filling.vue
@@ -12,18 +12,17 @@ <el-form-item label="填空答案:" required> <el-form-item :label="item.prefix" :key="item.prefix" v-for="item in form.items" label-width="50px" class="question-item-label"> <el-input v-model="item.content" @focus="inputClick(item, 'content')" class="question-item-content-input" style="width: 50%" /> <span class="question-item-span">分数:</span><el-input-number v-model="item.score" :precision="1" :step="1" :max="100"></el-input-number> <el-input v-model="item.content" @focus="inputClick(item, 'content')" class="question-item-content-input" /> <!-- <span v-if="false" class="question-item-span">分数:</span><el-input-number v-model="item.score" :precision="1" :step="1" :max="100"></el-input-number> --> </el-form-item> </el-form-item> <el-form-item label="解析:" prop="analyze" required> <el-input v-model="form.analyze" @focus="inputClick(form, 'analyze')" /> </el-form-item> <el-form-item label="分数:" prop="score" required> <!-- <el-form-item label="分数:" prop="score" required> <el-input-number v-model="form.score" :precision="1" :step="1" :max="100"></el-input-number> </el-form-item> </el-form-item> --> <el-form-item label="难度:" required> <el-rate v-model="form.difficult" class="question-item-rate"></el-rate> </el-form-item> @@ -105,17 +104,23 @@ }, } }, props: { id: { type: Number, default: 0 } }, created() { let id = this.$route.query.id this.getSubjects(); let id = this.id let _this = this if (id && parseInt(id) !== 0) { _this.formLoading = true questionApi.select(id).then(re => { _this.form = re.response _this.form = re.data _this.formLoading = false }) } this.getSubjects(); }, methods: { // 获取科目 src/components/PopUp/multiple-choice.vue
@@ -19,9 +19,9 @@ <el-form-item label="解析:" prop="analyze" required> <el-input v-model="form.analyze" @focus="inputClick(form,'analyze')" /> </el-form-item> <el-form-item label="分数:" prop="score" required> <!-- <el-form-item label="分数:" prop="score" required> <el-input-number v-model="form.score" :precision="1" :step="1" :max="100"></el-input-number> </el-form-item> </el-form-item> --> <el-form-item label="难度:" required> <el-rate v-model="form.difficult" class="question-item-rate"></el-rate> </el-form-item> @@ -53,7 +53,7 @@ <script> import QuestionShow from '@/components/PopUp/question/Show' import Ueditor from '@/components/Ueditor' import { mapGetters, mapState, mapActions } from 'vuex' import { mapActions } from 'vuex' import questionApi from '@/api/question' import subjectApi from '@/api/subject' @@ -117,13 +117,20 @@ } } }, props: { id: { type: Number, default: 0 } }, created () { let id = this.$route.query.id this.getSubjects(); let id = this.id let _this = this if (id && parseInt(id) !== 0) { _this.formLoading = true questionApi.select(id).then(re => { _this.form = re.response _this.form = re.data _this.formLoading = false }) } src/components/PopUp/question/Show.vue
@@ -60,3 +60,8 @@ methods: {} } </script> <style scoped> /deep/ td { background-color: #f0f0f0; } </style> src/components/PopUp/short-answer.vue
@@ -15,9 +15,9 @@ <el-form-item label="解析:" prop="analyze" required> <el-input v-model="form.analyze" @focus="inputClick(form,'analyze')" /> </el-form-item> <el-form-item label="分数:" prop="score" required> <!-- <el-form-item label="分数:" prop="score" required> <el-input-number v-model="form.score" :precision="1" :step="1" :max="100"></el-input-number> </el-form-item> </el-form-item> --> <el-form-item label="难度:" required> <el-rate v-model="form.difficult" class="question-item-rate"></el-rate> </el-form-item> @@ -43,7 +43,6 @@ <script> import QuestionShow from '@/components/PopUp/question/Show' import Ueditor from '@/components/Ueditor' import { mapGetters, mapState, mapActions } from 'vuex' import questionApi from '@/api/question' import subjectApi from '@/api/subject' @@ -102,13 +101,20 @@ } } }, props: { id: { type: Number, default: 0 } }, created () { let id = this.$route.query.id this.getSubjects(); let id = this.id let _this = this if (id && parseInt(id) !== 0) { _this.formLoading = true questionApi.select(id).then(re => { _this.form = re.response _this.form = re.data _this.formLoading = false }) } src/components/PopUp/single-choice.vue
@@ -19,9 +19,9 @@ <el-form-item label="解析:" prop="analyze" required> <el-input v-model="form.analyze" @focus="inputClick(form,'analyze')" /> </el-form-item> <el-form-item label="分数:" prop="score" required> <!-- <el-form-item label="分数:" prop="score" required> <el-input-number v-model="form.score" :precision="1" :step="1" :max="100"></el-input-number> </el-form-item> </el-form-item> --> <el-form-item label="难度:" required> <el-rate v-model="form.difficult" class="question-item-rate"></el-rate> </el-form-item> @@ -53,7 +53,6 @@ <script> import QuestionShow from '@/components/PopUp/question/Show' import Ueditor from '@/components/Ueditor' import { mapGetters, mapState, mapActions } from 'vuex' import questionApi from '@/api/question' import subjectApi from '@/api/subject' @@ -117,13 +116,20 @@ } } }, props: { id: { type: Number, default: 0 } }, created () { let id = this.$route.query.id this.getSubjects(); let id = this.id let _this = this if (id && parseInt(id) !== 0) { _this.formLoading = true questionApi.select(id).then(re => { _this.form = re.response _this.form = re.data _this.formLoading = false }) } src/components/PopUp/true-false.vue
@@ -18,9 +18,9 @@ <el-form-item label="解析:" prop="analyze" required> <el-input v-model="form.analyze" @focus="inputClick(form,'analyze')" /> </el-form-item> <el-form-item label="分数:" prop="score" required> <!-- <el-form-item label="分数:" prop="score" required> <el-input-number v-model="form.score" :precision="1" :step="1" :max="100"></el-input-number> </el-form-item> </el-form-item> --> <el-form-item label="难度:" required> <el-rate v-model="form.difficult" class="question-item-rate"></el-rate> </el-form-item> @@ -51,7 +51,6 @@ <script> import QuestionShow from '@/components/PopUp/question/Show' import Ueditor from '@/components/Ueditor' import { mapGetters, mapState, mapActions } from 'vuex' import questionApi from '@/api/question' import subjectApi from '@/api/subject' @@ -113,13 +112,20 @@ } } }, props: { id: { type: Number, default: 0 } }, created () { let id = this.$route.query.id this.getSubjects(); let id = this.id let _this = this if (id && parseInt(id) !== 0) { _this.formLoading = true questionApi.select(id).then(re => { _this.form = re.response _this.form = re.data _this.formLoading = false }) } src/views/Manage/TestPaper/QuestionBank.vue
@@ -19,21 +19,23 @@ <div> <el-form :inline="true" :model="queryParam" class="demo-form-inline" label-width="80px"> <el-form-item> <el-input v-model="queryParam.content" placeholder="题目名"></el-input> <el-input v-model="queryParam.content" placeholder="请输入题目" clearable></el-input> </el-form-item> <el-form-item> <el-select v-model="queryParam.subjectId" 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="queryParam.questionType" 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> @@ -43,52 +45,62 @@ </el-form> </div> <!-- 表格 --> <el-table v-loading="listLoading" :header-cell-style="getRowClass" :data="tableData" border style="width: 100%;"> <el-table-column align="center" prop="shortTitle" 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="subjectName" label="科目"> <el-table-column align="center" prop="subjectName" label="科目" width="150px"> </el-table-column> <el-table-column align="center" prop="questionTypeName" 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="score" label="分数"> </el-table-column> --> <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 prop="difficult" label="难度" width="60px"/> <el-table-column prop="createTime" label="创建时间" width="160px"/> <el-table-column label="操作" align="center" width="220px"> <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="danger" @click="deleteQuestion(row)" class="link-left">删除</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;"> <pagination v-show="total > 0" :total="total" :page.sync="queryParam.pageIndex" :limit.sync="queryParam.pageSize" @pagination="search" /> </div> </div> </div> </div> <!-- 填空 --> <el-dialog :visible.sync="gapVisible" :close-on-click-modal="false"> <gap ref="gap" @children="parentGoods" @callback="callback" /> <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"> <multiple ref="multiple" @children="parentGoods" @callback="callback" /> <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"> <short ref="short" @children="parentGoods" @callback="callback" /> <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"> <single ref="single" @children="parentGoods" @callback="callback" /> <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"> <trues ref="trues" @children="parentGoods" @callback="callback" /> <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%"> @@ -106,6 +118,8 @@ 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 { // 注册 @@ -115,10 +129,12 @@ short, single, trues, QuestionShow QuestionShow, Pagination }, data() { return { updateId: '', questionShow: { qType: 0, dialog: false, @@ -127,9 +143,10 @@ }, listLoading: true, queryParam: { questionType: null, subjectId: null, content: null, questionType: [], subjectId: [], content: '', status: '', pageIndex: 1, pageSize: 10 }, @@ -140,12 +157,20 @@ singleVisible: false, truesVisible: false, tableData: [], subjects: [] }; }, created() { this.search() this.getSubjects(); }, methods: { // 获取科目 getSubjects() { subjectApi.list().then(re => { this.subjects = re.data }) }, callback() { this.gapVisible = false; this.multipleVisible = false; @@ -165,21 +190,9 @@ this.listLoading = false }) }, // 返回上一个页面 goBack() { this.$router.back(); }, // 修改表单头部的颜色 getRowClass() { return "background:#d2d3d6"; }, // 生成试卷 getCreate() { // 跳转到生成页面 //跳转到对应的管理页面 this.$router.push({ path: "/manage/test-paper-generation", }); }, // 点击后调用弹窗组件的方法,开启弹窗 getDialogFormVisible(value) { @@ -200,6 +213,7 @@ this.truesVisible = true; break; } this.updateId = ''; }, // 弹窗 // 接收弹窗组件返回的表单值 @@ -217,8 +231,22 @@ }) }, editQuestion (row) { let url = this.enumFormat(this.editUrlEnum, row.questionType) this.$router.push({ path: url, query: { id: row.id } }) 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 @@ -239,7 +267,6 @@ editUrlEnum: state => state.exam.question.editUrlEnum }), ...mapGetters('exam', ['subjectEnumFormat']), ...mapState('exam', { subjects: state => state.subjects }) } }; </script>