feat: questioncat 页面

This commit is contained in:
caoqianming 2024-06-03 14:08:26 +08:00
parent 210eef9e9d
commit 2a4a6e4924
2 changed files with 444 additions and 4 deletions

173
src/api/model/edu.js Normal file
View File

@ -0,0 +1,173 @@
import config from "@/config"
import http from "@/utils/request"
export default {
questioncat: {
list: {
name: "列表",
req: async function(data){
return await http.get(
`${config.API_URL}/edu/questioncat/`,
data
);
}
},
item: {
name: "获取详情",
req: async function(id){
return await http.get(
`${config.API_URL}/edu/questioncat/${id}/`
);
}
},
update: {
name: "更新",
req: async function(id, data){
return await http.put(
`${config.API_URL}/edu/questioncat/${id}/`,
data);
}
},
create: {
name: "创建",
req: async function(data){
return await http.post(
`${config.API_URL}/edu/questioncat/`,
data);
}
},
delete: {
name: "删除",
req: async function(id){
return await http.delete(
`${config.API_URL}/edu/questioncat/${id}/`);
}
},
},
question: {
list: {
name: "列表",
req: async function(data){
return await http.get(
`${config.API_URL}/edu/question/`,
data
);
}
},
item: {
name: "获取详情",
req: async function(id){
return await http.get(
`${config.API_URL}/edu/question/${id}/`
);
}
},
update: {
name: "更新",
req: async function(id, data){
return await http.put(
`${config.API_URL}/edu/question/${id}/`,
data);
}
},
create: {
name: "创建",
req: async function(data){
return await http.post(
`${config.API_URL}/edu/question/`,
data);
}
},
delete: {
name: "删除",
req: async function(id){
return await http.delete(
`${config.API_URL}/edu/question/${id}/`);
}
},
},
paper: {
list: {
name: "列表",
req: async function(data){
return await http.get(
`${config.API_URL}/edu/paper/`,
data
);
}
},
item: {
name: "获取详情",
req: async function(id){
return await http.get(
`${config.API_URL}/edu/paper/${id}/`
);
}
},
update: {
name: "更新",
req: async function(id, data){
return await http.put(
`${config.API_URL}/edu/paper/${id}/`,
data);
}
},
create: {
name: "创建",
req: async function(data){
return await http.post(
`${config.API_URL}/edu/paper/`,
data);
}
},
delete: {
name: "删除",
req: async function(id){
return await http.delete(
`${config.API_URL}/edu/paper/${id}/`);
}
},
},
exam: {
list: {
name: "列表",
req: async function(data){
return await http.get(
`${config.API_URL}/edu/exam/`,
data
);
}
},
item: {
name: "获取详情",
req: async function(id){
return await http.get(
`${config.API_URL}/edu/exam/${id}/`
);
}
},
update: {
name: "更新",
req: async function(id, data){
return await http.put(
`${config.API_URL}/edu/exam/${id}/`,
data);
}
},
create: {
name: "创建",
req: async function(data){
return await http.post(
`${config.API_URL}/edu/exam/`,
data);
}
},
delete: {
name: "删除",
req: async function(id){
return await http.delete(
`${config.API_URL}/edu/exam/${id}/`);
}
},
}
}

View File

@ -1,5 +1,272 @@
<template>
<div>
<h2>question</h2>
</div>
</template>
<el-container>
<el-aside width="20%">
<el-container>
<el-header>
<div class="left-panel">
<el-button
type="primary"
icon="el-icon-plus"
@click="table_add0"
v-auth="'questioncat.create'"
></el-button>
</div>
<div class="right-panel">
<span style="font-size: 14px">题库分类</span>
</div>
</el-header>
<el-main class="nopadding">
<scTable
ref="table0"
:apiObj="apiObj0"
row-key="id"
:query="query"
:isTree="true"
stripe
default-expand-all
hidePagination
@dataChange="dataChange0"
>
<el-table-column
label="分类名"
prop="name"
></el-table-column>
<el-table-column
label="操作"
fixed="right"
width="80"
>
<template #default="scope">
<el-button
link
size="small"
@click="table_edit0(scope.row)"
v-auth="'questioncat.update'"
type="primary"
icon="el-icon-edit"
></el-button>
<el-popconfirm
title="确定删除吗?"
@confirm="
table_del0(scope.row, scope.$index)
"
>
<template #reference>
<el-button
link
size="small"
v-auth="'questioncat.delete'"
type="danger"
icon="el-icon-delete"
></el-button>
</template>
</el-popconfirm>
</template>
</el-table-column>
</scTable>
</el-main>
</el-container>
</el-aside>
<el-main class="nopadding">
<el-container>
<el-header>
<div class="left-panel">
<el-button
type="primary"
icon="el-icon-plus"
@click="table_add"
v-auth="'question.create'"
></el-button>
</div>
<div class="right-panel">
<el-input
style="margin-right: 5px"
v-model="query.search"
placeholder="题目"
clearable
></el-input>
<el-button
type="primary"
icon="el-icon-search"
@click="handleQuery"
></el-button>
</div>
</el-header>
<el-main class="nopadding">
<scTable
ref="table"
:apiObj="apiObj"
row-key="id"
:query="query"
>
<el-table-column
label="题型"
prop="type"
></el-table-column>
<el-table-column
label="题目"
prop="name"
min-width="440px"
></el-table-column>
<el-table-column
label="分类"
width="180"
prop="questioncat"
></el-table-column>
<el-table-column
label="难度"
prop="level"
width="80"
></el-table-column>
<el-table-column
label="启用"
prop="enabled"
width="80"
></el-table-column>
<el-table-column
label="操作"
fixed="right"
align="center"
width="150"
>
<template #default="scope">
<el-button
link
size="small"
@click="table_edit(scope.row)"
v-auth="'exam.update'"
type="primary"
>编辑</el-button
>
<el-popconfirm
title="确定删除吗?"
@confirm="
table_del(scope.row, scope.$index)
"
>
<template #reference>
<el-button
link
size="small"
v-auth="'exam.delete'"
type="danger"
>删除</el-button
>
</template>
</el-popconfirm>
</template>
</el-table-column>
</scTable>
</el-main>
</el-container>
</el-main>
<el-dialog v-model="questioncatDialog" title="新增/编辑分类">
<el-form :model="questioncatForm" label-width="100px" ref="questioncatForm">
<el-form-item label="名称" prop="name" required>
<el-input
v-model="questioncatForm.name"
clearable
></el-input>
</el-form-item>
<el-form-item label="上级分类">
<el-cascader
v-model="questioncatForm.parent"
:options="questioncatOptions"
:show-all-levels="false"
:props="groupsProps"
clearable
style="width: 100%"
></el-cascader>
</el-form-item>
<el-form-item label="排序" required>
<el-input-number
v-model="questioncatForm.sort"
controls-position="right"
:min="1"
style="width: 100%"
></el-input-number>
</el-form-item>
</el-form>
<template #footer>
<el-button type="primary" :loading="questioncatSaving" @click="questioncatSubmit()"
> </el-button>
</template>
</el-dialog>
</el-container>
</template>
<script>
import { genTree } from "@/utils/verificate";
export default {
data() {
return {
questioncatDialog: false,
questioncatForm: {},
questioncatOptions: [],
questioncatSaving: false,
groupsProps: {
multiple: false,
emitPath: false,
},
apiObj0: this.$API.edu.questioncat.list,
apiObj: this.$API.edu.exam.list,
query: {
search: "",
},
};
},
mounted() {},
methods: {
dataChange0(res, tableData) {
this.questioncatOptions = genTree(tableData);
},
questioncatAdd() {
this.questioncatForm = {};
this.questioncatDialog = true;
this.$nextTick(() => {
this.$refs.questioncatForm.resetFields()
});
},
questioncatSubmit() {
this.questioncatSaving = true;
this.$refs.questioncatForm.validate((valid) => {
if (valid) {
if(this.questioncatForm.id){
this.$API.edu.questioncat.update.req(this.questioncatForm.id, this.questioncatForm).then(() => {
this.questioncatSaving = false;
this.$message.success("操作成功");
this.questioncatDialog = false;
this.$refs.table0.refresh();
}).catch(e=>{this.questioncatSaving = false;});
}else{
this.$API.edu.questioncat.create.req(this.questioncatForm).then(() => {
this.questioncatSaving = false;
this.$message.success("操作成功");
this.questioncatDialog = false;
this.$refs.table0.refresh();
}).catch(e=>{this.questioncatSaving = false;});
}
}else{
this.questioncatSaving = false;
}
});
},
handleQuery() {
this.$refs.table.queryData(this.query);
},
table_add0() {
this.questioncatDialog = true;
this.$nextTick(() => {
this.$refs.questioncatForm.resetFields()
});
},
table_edit0(row, index){
this.questioncatForm = {...row};
this.questioncatDialog = true;
},
table_add() {},
table_edit() {},
table_del() {},
},
};
</script>