完成试卷管理模块;新增订单模块

This commit is contained in:
2023-02-23 10:12:05 +08:00
parent 40f5e10da7
commit db82d6ca21
10 changed files with 1687 additions and 69 deletions

View File

@@ -4,6 +4,7 @@
import api from '@/api/exercises'
import capi from '@/api/course'
import custom from '@/utils/custom'
import {formatDate} from '@/utils/format'
// import { toSQLLine } from '@/utils/stringFun'
import WarningBar from '@/components/warningBar/warningBar.vue'
import ckEditor from '@/components/richText/ckEditor5.vue'
@@ -23,13 +24,13 @@ const queryParams = ref({
subject:''
})
const subjectParams = ref({
pageIndex:1,
page:1,
pageSize:100,
})
const tableData = ref([])
const subjectList = ref([])
const deleteVisible = ref(false)
const course_ids = ref([])
const question_ids = ref([])
const total = ref(0)
const dialogFormVisible = ref(false)
const dialogTitle = ref('')
@@ -37,19 +38,26 @@ const form =ref({})
const rules = ref({
name: [{ required: true, message: '请输入课程名称', trigger: 'blur' }]
})
const course_id = ref(0)
const question_id = ref(0)
const content = ref(null)
const options = ref(null)
const options = ref([]) // 答案选项数组
const question_form = ref({
options:[],
answer:'',
title:''
})
// 生命周期
onMounted(() => {
getExercisesList()
getSubject()
// console.log(options.value.size)
})
// 方法
async function getExercisesList() {
const res = await api.getExercisesList(queryParams.value)
if(res.code === 0) {
tableData.value = res.data.records
total.value = res.data.total
}
}
async function getSubject(){ // 获取课程分类
@@ -64,7 +72,7 @@ function onSubmit() {
}
const onReset = () => {
queryParams.value = {
pageIndex:1,
page:1,
pageSize:10,
name:'',
status:'',
@@ -79,7 +87,7 @@ function openDialog(type) {
form.value = {}
break;
case 'edit':
// params.course_id = course_id.value
// params.question_id = question_id.value
dialogTitle.value = '编辑习题'
break;
}
@@ -87,9 +95,9 @@ function openDialog(type) {
// router.push({name:'addCourse',params})
}
async function onDelete() {
console.log(course_ids.value)
const ids = course_ids.value.map(item => item.course_id)
const res = await api.delCourse({ ids })
// console.log(question_ids.value)
const ids = question_ids.value.map(item => item.question_id)
const res = await api.delExercises({ question_ids:ids })
if (res.code === 0) {
ElMessage({
type: 'success',
@@ -104,42 +112,46 @@ async function onDelete() {
}
const handleSelectionChange = (val) => {
// console.log(val)
course_ids.value = val
question_ids.value = val
}
function editCourseFunc(row) {
course_id.value = row.course_id
question_id.value = row.question_id
form.value = row
// console.log(JSON.parse(row.question))
content.value = JSON.parse(row.question).title
options.value = JSON.parse(row.question).option
// if(JSON.parse(row.question).option) {
// question_form.value.options = JSON.parse(row.question).option
// }
// else{
// question_form.value.options = []
// }
question_form.value = JSON.parse(row.question)
openDialog('edit')
console.log(JSON.parse(row.question))
}
function deleteCourseFunc(row) {
// console.log(row); return
ElMessageBox.confirm('此操作将永久删除该数据, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
.then(async() => {
const res = await api.delCourse({
ids:[row.course_id]
const res = await api.delExercises({
question_ids:[row.question_id]
})
if (res.code === 0) {
ElMessage({
type: 'success',
message: '删除成功!'
})
// if (tableData.value.length === 1 && page.value > 1) {
// page.value--
// }
getExercisesList()
}
},() => {
})
}
function handleCurrentChange(val) {
queryParams.value.pageIndex = val
queryParams.value.page = val
getExercisesList()
}
function handleSizeChange(val) {
@@ -148,17 +160,69 @@ function handleSizeChange(val) {
}
function closeDialog(){
dialogFormVisible.value = false
question_form.value = {
options:[],
answer:'',
title:''
}
form.value = {}
}
function enterDialog() {
console.log(content.value)
async function enterDialog() { // 提交
form.value.score = parseInt(form.value.score)
form.value.teacher_id = 0
form.value.question = JSON.stringify(question_form.value)
console.log(form.value)
const res = await api.addExercises(form.value)
if(res.code === 0) {
ElMessage({
type: 'success',
message: res.msg
})
// if (tableData.value.length === ids.length && page.value > 1) {
// page.value--
// }
// deleteVisible.value = false
closeDialog()
getExercisesList()
}
}
function viewCourseFunc(row) { // 查看课程
router.push({name:'viewCourse',params:{course_id:row.course_id}})
router.push({name:'viewCourse',params:{question_id:row.question_id}})
}
function getExercisesName(row) {
// console.log(JSON.parse(row.question))
return JSON.parse(row.question).title
}
const std_options_title = ref(['A','B','C','D','E','F'])
function addOptionFunc() {
// for(let i=0 ;i<std_options_title.value.length;i++) {
// if(!options.value.has(std_options_title.value[i])) {
// options.value.set(std_options_title.value[i],'')
// break;
// }
// }
// console.log(options.value)
for(let i=0 ;i<std_options_title.value.length;i++) {
let has_flag = false
for(let item of question_form.value.options){
if(item.name === std_options_title.value[i]) {
has_flag = true
}
}
if(!has_flag) {
let data = {
name:std_options_title.value[i],
value: ''
}
question_form.value.options.push(data)
break
}
}
}
function delet_func(item) {
question_form.value.options.pop()
}
</script>
<template>
<div>
@@ -206,7 +270,7 @@ function getExercisesName(row) {
<el-button size="small" type="primary" @click="onDelete">确定</el-button>
</div>
<template #reference>
<el-button icon="delete" size="small" type="danger" :disabled="!course_ids.length" style="margin-left: 10px;" @click="deleteVisible = true">删除</el-button>
<el-button icon="delete" size="small" type="danger" :disabled="!question_ids.length" style="margin-left: 10px;" @click="deleteVisible = true">删除</el-button>
</template>
</el-popover>
</div>
@@ -230,7 +294,11 @@ function getExercisesName(row) {
</template>
</el-table-column>
<el-table-column align="left" label="创建者" min-width="150" prop="teacher_id" />
<el-table-column align="left" label="创建时间" min-width="150" prop="createdAt" />
<el-table-column align="left" label="创建时间" min-width="150" >
<template #default="scope">
{{formatDate(scope.row.CreatedAt)}}
</template>
</el-table-column>
<el-table-column align="left" fixed="right" label="操作" width="200">
<template #default="scope">
<!-- <el-button-->
@@ -259,7 +327,7 @@ function getExercisesName(row) {
</el-table>
<div class="gva-pagination">
<el-pagination
:current-page="queryParams.pageIndex"
:current-page="queryParams.page"
:page-size="queryParams.pageSize"
:page-sizes="[10, 30, 50, 100]"
:total="total"
@@ -278,7 +346,7 @@ function getExercisesName(row) {
v-for="item in subjectList"
:key="item.id"
:label="item.name"
:value="item.id"
:value="item.name"
/>
</el-select>
</el-form-item>
@@ -293,22 +361,29 @@ function getExercisesName(row) {
</el-select>
</el-form-item>
<el-form-item label="题目内容" >
<ckEditor v-model="content" :content="content" />
<ckEditor v-model="question_form.title" :content="question_form.title" />
</el-form-item>
<el-form-item label="分值" >
<el-input v-model="form.score" placeholder="请输入分值" />
<el-input type="number" v-model="form.score" placeholder="请输入分值" />
</el-form-item>
<el-form-item label="答案" >
<!-- <el-input v-model="form.score" placeholder="请输入分值" />-->
<view class="options-box" v-if="options">
<view class="option-item">
<ckEditor v-model="content" :content="content" />
<el-icon><Minus /></el-icon>
<view class="options-box">
<view class="option-item" v-if="question_form.options.length>0" v-for="(item,i) in question_form.options">
<view>{{item.name}}</view>
<ckEditor v-model="item.value" :content="item.value" style="margin-left:5px" />
<el-icon style="margin-left: 5px;cursor: pointer" v-if="(i+1) == question_form.options.length" @click="delet_func(item)"><Delete /></el-icon>
</view>
<el-button @click="addOptionFunc">添加答案</el-button>
</view>
<el-button>添加答案</el-button>
</el-form-item>
<el-form-item label="正确答案" >
<el-input v-model="question_form.answer" placeholder="请输入正确答案选择题A或A-B填空题直接填值" />
</el-form-item>
<el-form-item label="题目解析" >
<!-- <el-input v-model="form.analysis" placeholder="请输入题目解析" />-->
<ckEditor v-model="form.resolve" :content="form.resolve" />
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
@@ -320,6 +395,11 @@ function getExercisesName(row) {
</div>
</template>
<style scoped lang="scss">
.option-item{
display: flex;
align-items: center;
margin-bottom: 10px;
}
.button-box {
padding: 10px 20px;
.el-button {