Commit 340fef27 by ‘巴博尔’

题库新增

parent 65ee652e
......@@ -312,7 +312,14 @@
<!-- 添加或修改题库主对话框 -->
<el-dialog :title="title" :visible.sync="open" width="70%" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="120px" class="app-container-form">
<el-form
ref="form"
:model="form"
:rules="rules"
label-width="120px"
label-position="top"
class="app-container-form"
>
<el-row :gutter="24">
<el-col :span="6">
<el-form-item label="题库类别" prop="categoryId">
......@@ -323,7 +330,6 @@
>
<el-option
v-for="item in [
{ label: '全部', value: '' },
{ label: '集合', value: '1' },
{ label: '不等式', value: '2' },
{ label: '函数', value: '3' },
......@@ -346,7 +352,6 @@
>
<el-option
v-for="item in [
{ label: '全部', value: '' },
{ label: '高一', value: '1' },
{ label: '高二', value: '2' },
{ label: '高三', value: '3' },
......@@ -367,7 +372,6 @@
>
<el-option
v-for="item in [
{ label: '全部', value: '' },
{ label: '基础', value: '1' },
{ label: '中等', value: '2' },
{ label: '提高', value: '3' },
......@@ -385,10 +389,10 @@
clearable
v-model="form.species"
placeholder="请选择习题种类"
@change="changeSpecies"
>
<el-option
v-for="item in [
{ label: '全部', value: '' },
{ label: '填空', value: '1' },
{ label: '选择', value: '2' },
{ label: '解答', value: '3' },
......@@ -403,46 +407,87 @@
</el-col>
<el-col :span="18">
<el-form-item label="题目" prop="topic">
<editor v-model="form.topic" :min-height="192"/>
<editor v-model="form.topic" :min-height="192" />
</el-form-item>
<el-form-item label="选项" prop="checkList">
<div class="app-container-form-check">
<i class="el-icon-circle-plus-outline app-container-form-check-add"></i>
<div v-for="(item,index) in form.checkList" :key="index" class="app-container-form-check-item">
<span class="app-container-form-check-item-type">{{item.type}}</span><i class="el-icon-remove-outline app-container-form-check-item-del"></i><i class="el-icon-circle-plus-outline app-container-form-check-item-add"></i>
<editor v-model="item.html" :min-height="192"/>
<template v-if="[1, '1', 3, '3'].includes(form.species)">
<el-form-item label="答案" prop="answer">
<editor v-model="form.answer" :min-height="192" />
</el-form-item>
<el-form-item label="答案图片" prop="rightAnswersPic">
<imageUpload :limit="9" v-model="form.rightAnswersPic" />
</el-form-item>
</template>
<template v-if="[2, '2'].includes(form.species)">
<el-form-item label="选项" prop="checkList">
<div class="app-container-form-check">
<i
class="el-icon-circle-plus-outline app-container-form-check-add"
v-if="!form.checkList || !form.checkList.length"
@click="clickAddCheckList"
></i>
<div
v-for="(item, index) in form.checkList"
:key="index"
class="app-container-form-check-item"
>
<span class="app-container-form-check-item-type">{{
index | filterType(form.checkList)
}}</span
><i
v-if="index + 1 === form.checkList.length"
class="el-icon-circle-plus-outline app-container-form-check-item-add"
@click="clickCheckItemAdd(index)"
></i>
<i
class="el-icon-remove-outline app-container-form-check-item-del"
v-else
@click="clickCheckItemDel(index)"
></i>
<editor v-model="item.html" :min-height="192" />
</div>
</div>
</div>
</el-form-item>
<el-form-item
label="标准答案"
prop="rightAnswers"
v-if="form.checkList && form.checkList.length"
>
<el-radio-group v-model="form.rightAnswers">
<el-radio
:label="index"
v-for="(item, index) in form.checkList"
:key="index"
>{{ index | filterType(form.checkList) }}</el-radio
>
</el-radio-group>
</el-form-item>
</template>
<el-form-item label="典例精讲" prop="explain">
<el-switch
@change="changeExplain"
v-model="form.explain"
active-color="#409eff"
>
</el-switch>
</el-form-item>
<template v-if="form.explain">
<el-form-item label="解答过程" prop="resolveCourse">
<editor v-model="form.resolveCourse" :min-height="192" />
</el-form-item>
<el-form-item label="解答视频" prop="resolveVideo">
<fileUpload
v-model="form.resolveVideo"
:limit="1"
:fileSize="10000"
:fileType="['mp4', 'mp3']"
/>
</el-form-item>
</template>
</el-col>
</el-row>
<el-form-item label="正确答案" prop="rightAnswers">
<el-input
v-model="form.rightAnswers"
type="textarea"
placeholder="请输入内容"
/>
</el-form-item>
<el-form-item label="正确答案图片" prop="rightAnswersPic">
<el-input
v-model="form.rightAnswersPic"
placeholder="请输入正确答案图片"
/>
</el-form-item>
<el-form-item label="解答过程" prop="resolveCourse">
<el-input
v-model="form.resolveCourse"
type="textarea"
placeholder="请输入内容"
/>
</el-form-item>
<el-form-item label="解答视频" prop="resolveVideo">
<el-input v-model="form.resolveVideo" placeholder="请输入解答视频" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<!-- <el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" placeholder="请输入备注" />
</el-form-item>
</el-form-item> -->
</el-form>
<div slot="footer" class="dialog-footer">
<el-button :loading="buttonLoading" type="primary" @click="submitForm"
......@@ -506,63 +551,163 @@ export default {
// 表单参数
form: {},
// 表单校验
rules: {
id: [{ required: true, message: "主键id不能为空", trigger: "blur" }],
categoryId: [
{ required: true, message: "类别id不能为空", trigger: "blur" },
],
species: [
rules: {},
};
},
filters: {
filterType(val, list) {
if (val >= 0) {
let arr = [
"A",
"B",
"C",
"D",
"E",
"F",
"G",
"H",
"I",
"J",
"K",
"L",
"M",
"N",
"O",
"P",
"Q",
"R",
"S",
"T",
"U",
"V",
"W",
"X",
"Y",
"Z",
];
return arr[val];
} else {
return val;
}
},
},
created() {
this.getList();
},
methods: {
changeExplain(e) {
let self = this;
if (e) {
self.$refs.form.clearValidate();
self.initleRules();
self.isExplan(e);
self.isSpec(self.form.species);
}
},
isExplan(val) {
let self = this;
if (val) {
self.$set(self.rules, "resolveCourse", [
{
required: true,
message: "习题种类:1填空,2选择,3解答不能为空",
trigger: "blur",
message: "解答过程不能为空",
trigger: ["blur", "change"],
},
],
phaseId: [
{ required: true, message: "阶段id不能为空", trigger: "blur" },
],
type: [
]);
self.$set(self.rules, "resolveVideo", [
{
required: true,
message: "类型:1典例精讲不能为空",
trigger: "change",
message: "解答视频不能为空",
trigger: ["blur", "change"],
},
]);
}
},
changeSpecies(e) {
let self = this;
self.$refs.form.clearValidate();
self.initleRules();
self.isSpec(e);
self.isExplan(self.form.explain);
},
isSpec(val) {
let self = this;
switch (parseInt(val)) {
case 1:
self.$set(self.rules, "answer", [
{
required: true,
message: "答案不能为空",
trigger: ["blur", "change"],
},
]);
self.$set(self.rules, "rightAnswersPic", [
{
required: true,
message: "答案图片不能为空",
trigger: ["blur", "change"],
},
]);
break;
case 2:
self.$set(self.rules, "checkList", [
{
required: true,
message: "选项不能为空",
trigger: ["blur", "change"],
},
]);
self.$set(self.rules, "rightAnswers", [
{
required: true,
message: "标准答案不能为空",
trigger: ["blur", "change"],
},
]);
break;
case 3:
self.$set(self.rules, "answer", [
{
required: true,
message: "答案不能为空",
trigger: ["blur", "change"],
},
]);
self.$set(self.rules, "rightAnswersPic", [
{
required: true,
message: "答案图片不能为空",
trigger: ["blur", "change"],
},
]);
break;
}
},
initleRules() {
this.rules = {
categoryId: [
{ required: true, message: "题库类别不能为空", trigger: "blur" },
],
intensity: [
species: [
{
required: true,
message: "强度:1基础,2中等,3提高不能为空",
message: "习题种类不能为空",
trigger: "blur",
},
],
topic: [{ required: true, message: "题目不能为空", trigger: "blur" }],
rightAnswers: [
{ required: true, message: "正确答案不能为空", trigger: "blur" },
],
rightAnswersPic: [
{ required: true, message: "正确答案图片不能为空", trigger: "blur" },
],
resolveCourse: [
{ required: true, message: "解答过程不能为空", trigger: "blur" },
],
resolveVideo: [
{ required: true, message: "解答视频不能为空", trigger: "blur" },
phaseId: [
{ required: true, message: "年级阶段不能为空", trigger: "blur" },
],
remark: [{ required: true, message: "备注不能为空", trigger: "blur" }],
status: [
intensity: [
{
required: true,
message: "状态:0正常,1删除不能为空",
trigger: "change",
message: "强度分类不能为空",
trigger: "blur",
},
],
},
};
},
created() {
this.getList();
},
methods: {
topic: [{ required: true, message: "题目不能为空", trigger: "blur" }],
};
},
/** 查询题库主列表 */
getList() {
this.loading = true;
......@@ -581,6 +726,7 @@ export default {
reset() {
this.form = {
id: undefined,
answer: undefined,
categoryId: undefined,
species: undefined,
phaseId: undefined,
......@@ -597,15 +743,66 @@ export default {
updateTime: undefined,
createBy: undefined,
updateBy: undefined,
checkList: [
{
type: 0,
html: ''
},
],
checkList: [],
explain: false,
};
this.resetForm("form");
},
clickAddCheckList() {
if (this.form.checkList && !this.form.checkList.length) {
this.form.checkList.unshift({
html: "",
});
}
},
clickCheckItemAdd(index) {
let self = this,
isKong = false;
if (index < 25) {
self.form.checkList.forEach((item, ik) => {
if (self.IsEmptyStr(self.getWangEditorText(item.html + '') + "")) {
isKong = true;
}
});
if (isKong) {
self.$message.warning("请填写选项内容");
} else {
self.form.checkList.push({
html: "",
});
}
} else {
self.$message.warning("最多26个选项");
}
},
clickCheckItemDel(index) {
let self = this;
self
.$confirm("确定删除此项吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
self.$delete(this.form.checkList, index);
})
.catch(() => {});
},
// 判断字符串是否为空
IsEmptyStr(str) {
str = str.toString();
if (
str == null ||
str == "null" ||
str == undefined ||
str == "undefined" ||
str.match(/^[\s]*$/)
) {
return true;
} else {
return false;
}
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
......@@ -627,6 +824,7 @@ export default {
this.reset();
this.open = true;
this.title = "添加题库主";
this.initleRules();
},
/** 修改按钮操作 */
handleUpdate(row) {
......@@ -640,10 +838,47 @@ export default {
this.title = "修改题库主";
});
},
getWangEditorText(str) {
console.log(str,"========str")
if (str) {
return str
.replace(/<[^<p>]+>/g, "") // 将所有<p>标签 replace ''
.replace(/<[</p>$]+>/g, "") // 将所有</p>标签 replace ''
.replace(/&nbsp;/gi, "") // 将所有 空格 replace ''
.replace(/<[^<br/>]+>/g, ""); // 将所有 换行符 replace ''
} else {
return "";
}
},
isEditor(itemName) {
let self = this;
if (self.IsEmptyStr(self.getWangEditorText(self.form[itemName]) + "")) {
self.$set(self.form, itemName, undefined);
self.$refs.form.validateField(itemName);
}
},
/** 提交按钮 */
submitForm() {
let self = this,isKong = false;
self.isEditor("topic");
if(self.form.checkList && self.form.checkList.length) {
self.form.checkList.forEach((item, ik) => {
console.log(item.html)
if (self.IsEmptyStr(self.getWangEditorText(item.html + '') + "")) {
isKong = true;
}
});
if (isKong) {
self.$message.warning("请填写选项内容");
self.$refs.form.validateField('checkList');
}
}
if (self.form.explain) {
self.isEditor("resolveCourse");
}
this.$refs["form"].validate((valid) => {
if (valid) {
console.log("规则通过");
this.buttonLoading = true;
if (this.form.id != null) {
updateQuestionBank(this.form)
......@@ -746,20 +981,42 @@ export default {
}
}
&-form {
height: 60vh;
overflow-x: hidden;
overflow-y: auto;
&-check {
&-add {
font-size: 30px;
color: #409EFF;
color: #409eff;
cursor: pointer;
}
&-item {
margin-bottom: 12px;
&-type {
display: inline-block;
padding: 4px 10px;
padding: 8px 15px;
border: 1px solid #eeecec;
font-size: 16px;
line-height: 16px;
border-radius: 5px;
margin: 0px 12px 15px 0px;
}
&-add,
&-del {
font-size: 25px;
cursor: pointer;
}
&-add {
color: #409eff;
}
&-del {
color: #f56c6c;
}
}
&-item:last-child {
margin-bottom: 0rpx;
}
}
}
}
</style>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment