From 05ea3ffeb18b80ddadfb411dd725d05cff1dd2e1 Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期三, 05 六月 2024 17:03:38 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
src/components/PopUp/multiple-choice.vue | 19 ++-
src/views/Manage/TestPaper/QuestionBank.vue | 145 +++++++++++++++++-----------
src/components/PopUp/gap-filling.vue | 23 ++-
src/components/PopUp/single-choice.vue | 18 ++-
src/components/PopUp/true-false.vue | 18 ++-
src/components/PopUp/question/Show.vue | 5 +
src/api/question.js | 1
src/components/PopUp/short-answer.vue | 18 ++-
8 files changed, 155 insertions(+), 92 deletions(-)
diff --git a/src/api/question.js b/src/api/question.js
index f28d6ce..780e7a5 100644
--- a/src/api/question.js
+++ b/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)
}
diff --git a/src/components/PopUp/gap-filling.vue b/src/components/PopUp/gap-filling.vue
index 46992d7..24d349d 100644
--- a/src/components/PopUp/gap-filling.vue
+++ b/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="瑙f瀽锛�" 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: {
// 鑾峰彇绉戠洰
diff --git a/src/components/PopUp/multiple-choice.vue b/src/components/PopUp/multiple-choice.vue
index 4ee4d6c..007389c 100644
--- a/src/components/PopUp/multiple-choice.vue
+++ b/src/components/PopUp/multiple-choice.vue
@@ -19,9 +19,9 @@
<el-form-item label="瑙f瀽锛�" 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 @@
}
}
},
- created () {
- let id = this.$route.query.id
+ props: {
+ id: {
+ type: Number,
+ default: 0
+ }
+ },
+ created() {
+ 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
})
}
diff --git a/src/components/PopUp/question/Show.vue b/src/components/PopUp/question/Show.vue
index 2b7e9c9..b1f3757 100644
--- a/src/components/PopUp/question/Show.vue
+++ b/src/components/PopUp/question/Show.vue
@@ -60,3 +60,8 @@
methods: {}
}
</script>
+<style scoped>
+ /deep/ td {
+ background-color: #f0f0f0;
+ }
+</style>
\ No newline at end of file
diff --git a/src/components/PopUp/short-answer.vue b/src/components/PopUp/short-answer.vue
index d5fc6ff..dcf5feb 100644
--- a/src/components/PopUp/short-answer.vue
+++ b/src/components/PopUp/short-answer.vue
@@ -15,9 +15,9 @@
<el-form-item label="瑙f瀽锛�" 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 @@
}
}
},
- created () {
- let id = this.$route.query.id
+ props: {
+ id: {
+ type: Number,
+ default: 0
+ }
+ },
+ created() {
+ 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
})
}
diff --git a/src/components/PopUp/single-choice.vue b/src/components/PopUp/single-choice.vue
index 80338ba..7c35dd5 100644
--- a/src/components/PopUp/single-choice.vue
+++ b/src/components/PopUp/single-choice.vue
@@ -19,9 +19,9 @@
<el-form-item label="瑙f瀽锛�" 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 @@
}
}
},
- created () {
- let id = this.$route.query.id
+ props: {
+ id: {
+ type: Number,
+ default: 0
+ }
+ },
+ created() {
+ 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
})
}
diff --git a/src/components/PopUp/true-false.vue b/src/components/PopUp/true-false.vue
index 45f1865..90f0efa 100644
--- a/src/components/PopUp/true-false.vue
+++ b/src/components/PopUp/true-false.vue
@@ -18,9 +18,9 @@
<el-form-item label="瑙f瀽锛�" 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 @@
}
}
},
- created () {
- let id = this.$route.query.id
+ props: {
+ id: {
+ type: Number,
+ default: 0
+ }
+ },
+ created() {
+ 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
})
}
diff --git a/src/views/Manage/TestPaper/QuestionBank.vue b/src/views/Manage/TestPaper/QuestionBank.vue
index aeb052a..473b0c4 100644
--- a/src/views/Manage/TestPaper/QuestionBank.vue
+++ b/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,56 +45,66 @@
</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>
- <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 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-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-tag :type="row.status === '绂佺敤' ? 'danger' : 'success'">
+ {{ row.status ? row.status : '鍚敤' }}
+ </el-tag>
+ </template>
+ </el-table-column>
+ <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;">
- <pagination v-show="total > 0" :total="total" :page.sync="queryParam.pageIndex"
- :limit.sync="queryParam.pageSize" @pagination="search" />
- </div>
+ <pagination v-show="total > 0" :total="total" :page.sync="queryParam.pageIndex"
+ :limit.sync="queryParam.pageSize" @pagination="search" />
</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%">
- <QuestionShow :qType="questionShow.qType" :question="questionShow.question" :qLoading="questionShow.loading"/>
+ <QuestionShow :qType="questionShow.qType" :question="questionShow.question" :qLoading="questionShow.loading" />
</el-dialog>
</div>
</template>
@@ -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,13 +213,14 @@
this.truesVisible = true;
break;
}
+ this.updateId = '';
},
// 寮圭獥
// 鎺ユ敹寮圭獥缁勪欢杩斿洖鐨勮〃鍗曞��
parentGoods(obj) {
console.log(obj, "寮圭獥缁勪欢鐨勮〃鍗曞��");
},
- showQuestion (row) {
+ showQuestion(row) {
let _this = this
this.questionShow.dialog = true
this.questionShow.loading = true
@@ -216,11 +230,25 @@
_this.questionShow.loading = false
})
},
- editQuestion (row) {
- let url = this.enumFormat(this.editUrlEnum, row.questionType)
- this.$router.push({ path: url, query: { id: row.id } })
+ editQuestion(row) {
+ this.getDialogFormVisible(row.questionTypeName);
+ this.updateId = row.id;
},
- deleteQuestion (row) {
+ 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) {
@@ -239,7 +267,6 @@
editUrlEnum: state => state.exam.question.editUrlEnum
}),
...mapGetters('exam', ['subjectEnumFormat']),
- ...mapState('exam', { subjects: state => state.subjects })
}
};
</script>
--
Gitblit v1.8.0