Commit a2bbdc18 authored by 耿迪迪's avatar 耿迪迪

承包商和访客培训 gengdidi

parent 17da3762
<template> <template>
<div class="form-wrapper"> <div class="form-wrapper">
<div style="width: 100%;height:100%;"> <div style="width: 100%;height:100%;">
<el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm"> <el-form :model="contractTrainForm" :rules="rules" ref="contractTrainForm" label-width="100px" class="demo-ruleForm">
<el-form-item label="培训名称" prop="name"> <el-form-item label="培训名称" prop="courseName">
<el-input v-model="ruleForm.name"></el-input> <el-input v-model="contractTrainForm.courseName"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="培训内容" prop="region"> <el-form-item label="培训内容" prop="courseConent">
<el-input type="textarea" v-model="ruleForm.region" rows="5"></el-input> <el-input type="textarea" v-model="contractTrainForm.courseConent" rows="5"></el-input>
</el-form-item>
<div class="flex">
<el-form-item label="视频上传" v-if="!readOnly" prop="video">
<FileUpload
listType="picture"
@resFun="getFileInfoVideo"
@remove="listRemoveVideo"
:fileArr="fileListVideo"
:fileSize="500"
:fileType="['mp4']"
/>
<el-input v-show="false" disabled v-model="contractTrainForm.video"></el-input>
</el-form-item>
<el-form-item label="附件上传" v-if="!readOnly" prop="enclosure">
<FileUpload
listType="picture"
@resFun="getFileInfoFile"
@remove="listRemoveFile"
:fileArr="fileListFile"
/>
<el-input v-show="false" disabled v-model="contractTrainForm.enclosure"></el-input>
</el-form-item> </el-form-item>
</div>
</el-form> </el-form>
</div> </div>
<el-form> <visitorQuestion ref="visitorQuestion"></visitorQuestion>
<div class="flex">
<el-form-item label="视频上传" v-if="!readOnly" prop="video">
<FileUpload
listType="picture"
@resFun="getFileInfoVideo"
@remove="listRemoveVideo"
:fileArr="fileListVideo"
:fileSize="500"
:fileType="['mp4']"
/>
<el-input v-show="false" disabled v-model="form.video"></el-input>
</el-form-item>
<el-form-item label="附件上传" v-if="!readOnly" prop="enclosure">
<FileUpload
listType="picture"
@resFun="getFileInfoFile"
@remove="listRemoveFile"
:fileArr="fileListFile"
/>
<el-input v-show="false" disabled v-model="form.enclosure"></el-input>
</el-form-item>
</div>
</el-form>
<visitorQuestion></visitorQuestion>
</div> </div>
</template> </template>
<script> <script>
import FileUpload from "@/components/FileUpload";
import FileUpload from "@/components/FileUpload"; import uploadfile from "@/assets/uploadfile.png";
import uploadfile from "@/assets/uploadfile.png"; import visitorQuestion from "@/views/educationPlanExam/visitorProgram/visitorQuestion";
import visitorQuestion from "@/views/educationPlanExam/visitorProgram/visitorQuestion"; import {listCourse} from "@/api/contractTrain/contractTrain";
// import visitorDia from "@/views/educationPlanExam/visitorProgram/visitorDia"; export default {
export default { data() {
data() { return {
return { contractTrainForm: {
ruleForm: { courseName: '',
name: '', courseConent: '',
region: '', video: "",
}, enclosure: "",
form: { },
video: "", fileListVideo: [],
enclosure: "", fileListFile: [],
}, readOnly: false,
fileListVideo: [], rules: {
fileListFile: [], name: [
readOnly: false, { required: true, message: '请输入培训名称', trigger: 'blur' }
rules: { ],
name: [ region: [
{ required: true, message: '请输入培训名称', trigger: 'blur' } { required: true, message: '请输入培训内容', trigger: 'change' }
], ],
region: [ video: [
{ required: true, message: '请输入培训内容', trigger: 'change' } { required: true, trigger: "blue", message: "视频不能为空" }
], ],
video: [ enclosure: [
{ required: true, trigger: "blue", message: "视频不能为空" } { required: true, trigger: "blur", message: "附件不能为空" },
], ],
enclosure: [ },
{ required: true, trigger: "blur", message: "附件不能为空" }, };
], },
components: {
FileUpload,
visitorQuestion,
},
created() {
this.getContractTrainList();
},
methods: {
getContractTrainList(){
listCourse().then(res =>{
this.contractTrainForm = res.rows[0];
if(this.contractTrainForm.video){
this.fileListVideo = [
{
name: this.contractTrainForm.courseName + "视频",
url: uploadfile,
},
];
}
if(this.contractTrainForm.enclosure){
this.fileListFile = [
{
name: this.contractTrainForm.courseName + "附件",
url: uploadfile,
},
];
}
this.$refs.visitorQuestion.rightNum = this.contractTrainForm.qualifiedNum;
this.$refs.visitorQuestion.getContractTopicList(this.contractTrainForm.contractorCourseId)
})
},
submitForm(formName) {
this.$refs[formName].validate((valid) => {
if (valid) {
alert('submit!');
} else {
console.log('error submit!!');
return false;
} }
}; });
}, },
components: {
FileUpload, getFileInfoVideo(res) {
visitorQuestion, this.contractTrainForm.video = res.url;
this.fileListVideo = [
{
name: res.fileName,
url: uploadfile,
},
];
}, },
created() { listRemoveVideo(e) {
if (this.courseId) { this.fileListVideo = [];
this.getLessonById(); this.contractTrainForm.video = "";
} // this.form.videoName = null;
},
getFileInfoFile(res) {
this.contractTrainForm.enclosure = res.url;
this.fileListFile = [
{
name: res.fileName,
url: uploadfile,
},
];
},
listRemoveFile(e) {
this.fileListFild = [];
this.contractTrainForm.enclosure = "";
// this.form.fileName = null;
}, },
methods: {
submitForm(formName) {
this.$refs[formName].validate((valid) => {
if (valid) {
alert('submit!');
} else {
console.log('error submit!!');
return false;
}
});
},
getFileInfoVideo(res) {
this.form.video = res.url;
// this.form.videoName = res.fileName;
this.fileListVideo = [
{
name: res.fileName,
url: uploadfile,
},
];
},
listRemoveVideo(e) {
this.fileListVideo = [];
this.form.video = "";
// this.form.videoName = null;
},
getFileInfoFile(res) {
this.form.enclosure = res.url;
// this.form.enclosureName = res.fileName;
this.fileListFile = [
{
name: res.fileName,
url: uploadfile,
},
];
},
listRemoveFile(e) {
this.fileListFild = [];
this.form.enclosure = "";
// this.form.fileName = null;
},
}
} }
</script> }
</script>
<style lang="scss" scoped> <style lang="scss" scoped>
.form-wrapper { .form-wrapper {
padding-top: 30px; padding-top: 30px;
...@@ -139,4 +153,4 @@ import visitorQuestion from "@/views/educationPlanExam/visitorProgram/visitorQue ...@@ -139,4 +153,4 @@ import visitorQuestion from "@/views/educationPlanExam/visitorProgram/visitorQue
justify-content: space-around; justify-content: space-around;
padding: 20px 30px; padding: 20px 30px;
} }
</style> </style>
\ No newline at end of file
...@@ -6,120 +6,118 @@ ...@@ -6,120 +6,118 @@
>道题 >道题
</div> </div>
</div> </div>
<el-form class="form flex" ref="form" :model="form" label-width="auto"> <el-form class="form flex" ref="form" :model="form" label-width="auto">
<!-- <div class="top flex"> --> <!-- <div class="top flex"> -->
<div> <div>
<el-form-item <el-form-item
label="题目" label="题目"
prop="topicTitle" prop="topicTitle"
:rules="{ :rules="{
required: true, required: true,
message: '必须输入题目内容', message: '必须输入题目内容',
trigger: 'blur', trigger: 'blur',
}" }"
>
<el-input
type="textarea"
placeholder="多行输入"
resize="none"
rows="4"
v-model="form.topicTitle"
> >
</el-input>
</el-form-item>
</div>
<div class="bottom">
<!-- <el-form-item label="选项1" prop="title">
<el-input v-model="form.title" placeholder="请输入"></el-input>
</el-form-item> -->
<el-form-item
v-for="(question, index) in form.questions"
:label="'选项' + (index + 1)"
:key="question.key"
:prop="'questions.' + index + '.value'"
:rules="
index === 0
? {
required: true,
message: '第一项不能为空不能为空',
trigger: 'blur',
}
: {}
"
>
<div class="add-select flex">
<el-input
type="textarea"
placeholder="多行输入"
style="flex: 1; margin-right: 10px"
rows="2"
v-model="question.value"
></el-input>
<div class="flex algin-items">
<el-button
@click="rightAnswerClick(index)"
class="right"
:class="{ active: answerNum === index }"
icon="el-icon-check"
>
设为答案
</el-button>
<el-button
size="mini"
type="danger"
v-if="index > 0"
@click.prevent="removeDomain(question)"
plain
icon="el-icon-delete"
>删除</el-button
>
</div>
</div>
</el-form-item>
<el-form-item
class="noAttr"
:label="`选项${form.questions.length + 1}`"
prop=""
>
<div class="add-select flex">
<el-input <el-input
type="textarea" type="textarea"
placeholder="多行输入" placeholder="多行输入"
resize="none" resize="none"
rows="4" rows="2"
v-model="form.topicTitle" v-model="addValue"
style="flex: 1; margin-right: 10px"
> >
</el-input> </el-input>
</el-form-item> <div class="flex algin-items">
</div> <el-button
@click="rightAnswerClick(form.questions.length)"
<div class="bottom"> class="right"
<!-- <el-form-item label="选项1" prop="title"> :class="{ active: answerNum === form.questions.length }"
<el-input v-model="form.title" placeholder="请输入"></el-input> icon="el-icon-check"
</el-form-item> --> >
<el-form-item 设为答案
v-for="(question, index) in form.questions" </el-button>
:label="'选项' + (index + 1)"
:key="question.key" <el-button
:prop="'questions.' + index + '.value'" size="mini"
:rules=" class="right1"
index === 0 @click.prevent="add(addValue)"
? { icon="el-icon-plus"
required: true, >新增</el-button
message: '第一项不能为空不能为空',
trigger: 'blur',
}
: {}
"
>
<div class="add-select flex">
<el-input
type="textarea"
placeholder="多行输入"
style="flex: 1; margin-right: 10px"
rows="2"
v-model="question.value"
></el-input>
<div class="flex algin-items">
<el-button
@click="rightAnswerClick(index)"
class="right"
:class="{ active: answerNum === index }"
icon="el-icon-check"
>
设为答案
</el-button>
<el-button
size="mini"
type="danger"
v-if="index > 0"
@click.prevent="removeDomain(question)"
plain
icon="el-icon-delete"
>删除</el-button
>
</div>
</div>
</el-form-item>
<el-form-item
class="noAttr"
:label="`选项${form.questions.length + 1}`"
prop=""
>
<div class="add-select flex">
<el-input
type="textarea"
placeholder="多行输入"
resize="none"
rows="2"
v-model="addValue"
style="flex: 1; margin-right: 10px"
> >
</el-input>
<div class="flex algin-items">
<el-button
@click="rightAnswerClick(form.questions.length)"
class="right"
:class="{ active: answerNum === form.questions.length }"
icon="el-icon-check"
>
设为答案
</el-button>
<el-button
size="mini"
class="right1"
@click.prevent="add(addValue)"
icon="el-icon-plus"
>新增</el-button
>
</div>
</div> </div>
</el-form-item> </div>
</div> </el-form-item>
</el-form> </div>
</div> </el-form>
</div> </div>
</template> </template>
<script> <script>
import { import {
addQuestion, addQuestion,
...@@ -128,20 +126,13 @@ ...@@ -128,20 +126,13 @@
getQuestion, getQuestion,
getLessonById, getLessonById,
} from "@/api/educationPlanExam/lessonsProgram.js"; } from "@/api/educationPlanExam/lessonsProgram.js";
export default { export default {
name: "AnswerLesson", name: "AnswerLesson",
props: { props: {
// visible: {
// type: Boolean,
// default: false,
// },
courseId: { courseId: {
type: Number, type: Number,
}, },
topicId: {
type: Number,
},
}, },
components: {}, components: {},
data() { data() {
...@@ -157,25 +148,9 @@ ...@@ -157,25 +148,9 @@
courseName: "", courseName: "",
}; };
}, },
created() { created() {
// 如果存在就是修改
// if (this.topicId) {
// checkQuestion(this.topicId).then((res) => {
// console.log(res.data);
// const data = res.data;
// this.form = {
// topicTitle: data.topicTitle,
// questions: JSON.parse(data.topicOption),
// };
// this.answerNum = data.answer;
// });
// }
// 查询是第几道题
// this.getQuestion();
// 获取课程标题
// this.getLessonById(this.courseId);
}, },
methods: { methods: {
getQuestion() { getQuestion() {
...@@ -215,48 +190,6 @@ ...@@ -215,48 +190,6 @@
// 新增选项 // 新增选项
add(addValue) { add(addValue) {
this.form.questions.push({ value: addValue }); this.form.questions.push({ value: addValue });
console.log();
},
save(num = 2) {
return new Promise((resove) => {
if (!this.answerNum && this.answerNum !== 0) {
this.$message({
message: "警告,请设置一个正确答案",
type: "warning",
});
return resove(false);
}
this.$refs.form.validate((valid) => {
if (valid) {
const data = {};
data.topicTitle = this.form.topicTitle;
data.topicOption = JSON.stringify(this.form.questions);
data.answer = this.answerNum;
this.addQuestion(data).then((res) => {
if (res.code == 200) {
// 把修改的这个归位,变成正常添加
this.$emit("update:topicId", null);
this.$message({
message: "添加题目成功",
type: "success",
});
this.$parent.$parent.componentsNumChange(num);
this.$parent.$parent.$parent.getList();
resove(true);
}
});
}
});
});
},
saveAndNext() {
this.save(3).then((res) => {
if (res) {
this.reset();
this.questionNextNum++;
}
});
}, },
reset() { reset() {
this.form = { this.form = {
...@@ -287,7 +220,7 @@ ...@@ -287,7 +220,7 @@
overflow-y: auto; overflow-y: auto;
height: 330px; height: 330px;
box-sizing: border-box; box-sizing: border-box;
.algin-items { .algin-items {
align-items: center; align-items: center;
width: 200px; width: 200px;
...@@ -359,4 +292,3 @@ ...@@ -359,4 +292,3 @@
} }
} }
</style> </style>
\ No newline at end of file
...@@ -11,21 +11,52 @@ ...@@ -11,21 +11,52 @@
<div style="color: #1890ff;">题目管理</div> <div style="color: #1890ff;">题目管理</div>
<div class="text flex"> <div class="text flex">
<div class="left"> <div class="left">
<el-button type="primary" plain @click="dialogVisible = true">{{ <el-button type="primary" plain @click="enterContractTrainTopic">录入考题</el-button>
saveNextText 目前有<span>{{questionNum}}</span>道题
}}</el-button>
目前有<span></span>道题
<span class="warn">温馨提示:发布课程前需要进行考试设置</span> <span class="warn">温馨提示:发布课程前需要进行考试设置</span>
</div> </div>
<!-- <div class="right">{{courseName}}</div> --> <!-- <div class="right">{{courseName}}</div> -->
</div> </div>
<!-- 试题列表 -->
<div class="table flex"> <div class="table flex">
<div class="th flex"> <div class="th flex">
<div class="left">序号</div> <div class="left">序号</div>
<div class="middle">题目名称</div> <div class="middle">题目名称</div>
<div class="right">操作</div> <div class="right">操作</div>
</div> </div>
<div class="td-wrapper">
<div
v-for="(item, index) in questionList"
:key="item.topicId"
class="td flex"
>
<div class="left">{{ index + 1 }}</div>
<div class="middle zzz">
{{ item.topicTitle }}
</div>
<div class="right">
<div>
<el-button
@click="editContractTrainTopic(item.topicId)"
icon="el-icon-edit"
type="text"
>修改</el-button
>
<el-button
@click="deleteContractTrainTopic(item.topicId)"
icon="el-icon-delete"
type="text"
>删除</el-button
>
</div>
</div>
</div>
</div>
</div> </div>
<!-- 底部 -->
<div class="d3"> <div class="d3">
<div class="rightNum flex"> <div class="rightNum flex">
<div class="left">考试设置</div> <div class="left">考试设置</div>
...@@ -53,58 +84,44 @@ ...@@ -53,58 +84,44 @@
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
<el-button <el-button
type="primary" type="primary"
@click="saveContractTrian"
>{{ "确认" }}</el-button >{{ "确认" }}</el-button
> >
<el-button>取消</el-button> <el-button>取消</el-button>
</div> </div>
</div> </div>
<el-dialog <el-dialog
title="录入题目" title="录入题目"
:visible.sync="dialogVisible" :visible.sync="dialogVisible"
> >
<visitorAdd></visitorAdd> <visitorAdd ref="visitorAdd" :key="next"/>
<span slot="footer" class="dialog-footer"> <span slot="footer" class="dialog-footer">
<!-- <el-button>保存</el-button>
<el-button type="primary" @click="dialogVisible = false">确 定</el-button> -->
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
<el-button <el-button
type="primary" type="primary"
@click="save" @click="save"
>保存</el-button >保存</el-button
> >
<el-button type="primary" @click="saveAndNext">保存并录入下一题</el-button>
<el-button type="primary" @click="saveAndNext">{{
saveNextText
}}</el-button>
<el-button
v-if="this.componentsNum == 2"
type="primary"
>{{ "确认" }}</el-button
>
<el-button @click="dialogVisible = false">取消</el-button> <el-button @click="dialogVisible = false">取消</el-button>
</div> </div>
</span> </span>
</el-dialog> </el-dialog>
</div> </div>
</template> </template>
<script> <script>
import visitorAdd from "@/views/educationPlanExam/visitorProgram/visitorAdd"; import visitorAdd from "@/views/educationPlanExam/visitorProgram/visitorAdd";
import {updateCourse} from "@/api/contractTrain/contractTrain";
import { addTopic,listTopic,getTopic,delTopic,updateTopic } from "@/api/contractTrain/contractTrainTopic";
export default { export default {
name: "AnswerLesson", name: "AnswerLesson",
props: { props: {
courseId: {
type: Number,
},
visible: { visible: {
type: Boolean, type: Boolean,
default: false, default: false,
}, },
componentsNum: {
type: Number,
default: 1,
},
}, },
components: { components: {
visitorAdd, visitorAdd,
...@@ -113,43 +130,148 @@ ...@@ -113,43 +130,148 @@
return { return {
dialogVisible: false, dialogVisible: false,
rightNum: 0, rightNum: 0,
next: 0,
questionList: [],
questionNum: null,
courseId: ""
}; };
}, },
methods: {
computed: { //获取考题列表
saveNextText() { getContractTopicList(contractorCourseId){
let text; this.courseId = contractorCourseId;
if (this.componentsNum == 1) { listTopic({contractorCourseId:contractorCourseId}).then(res =>{
text = "保存并录入题目"; this.questionList = res.rows.map((item) => {
} else if (this.componentsNum == 2) { return {
text = "录入考题"; topicId: item.topicId,
topicTitle: item.topicTitle,
};
});
this.questionNum = res.total;
})
},
//录入考题
enterContractTrainTopic(){
this.dialogVisible = true;
this.$nextTick(() => {
this.$refs.visitorAdd.questionNextNum = this.questionNum + 1;
})
},
//保存试题
save(next) {
new Promise((resove) => {
if (!this.$refs.visitorAdd.answerNum && this.$refs.visitorAdd.answerNum !== 0) {
this.$message({
message: "警告,请设置一个正确答案",
type: "warning",
});
return resove(false);
}
this.$refs.visitorAdd.$refs.form.validate((valid) => {
if (valid) {
const data = {};
data.contractorCourseId = this.courseId;
data.topicTitle = this.$refs.visitorAdd.form.topicTitle;
data.topicOption = JSON.stringify(this.$refs.visitorAdd.form.questions);
data.answer = this.$refs.visitorAdd.answerNum;
this.addContractTrainTopic(data).then((res) => {
if (res.code == 200) {
// 把修改的这个归位,变成正常添加
this.$emit("update:topicId", null);
this.$message({
message: "添加题目成功",
type: "success",
});
if(next != 1){
this.dialogVisible = false;
this.getContractTopicList(this.courseId)
}else{
this.next++;
}
resove(true);
}
});
}
});
});
},
//保存并录入下一题
saveAndNext() {
this.save(1);
},
//新增试题
addContractTrainTopic(data){
if (this.$refs.visitorAdd.form.topicId) {
return updateTopic({ topicId: this.$refs.visitorAdd.form.topicId, ...data });
} else { } else {
text = "保存并录入下一题"; return addTopic({ contractorCourseId: this.courseId, ...data });
} }
return text;
}, },
}, //试题修改
created() { editContractTrainTopic(topicId){
console.log("this.courseId", this.courseId); this.dialogVisible = true;
}, getTopic(topicId).then(res =>{
methods: { const data = res.data;
handleClose(done) { this.$refs.visitorAdd.form = {
this.$confirm('确认关闭?') topicId: data.topicId,
.then(_ => { topicTitle: data.topicTitle,
done(); questions: JSON.parse(data.topicOption),
}) };
.catch(_ => {}); this.$refs.visitorAdd.answerNum = data.answer;
})
}, },
save() { //试题删除
// this.answerClear(); deleteContractTrainTopic(topicId){
this.$refs.current.save(); this.$confirm("请确定删除该题", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
}).then(() => {
return delTopic(topicId);
}).then((res) => {
if (res.code == 200) {
this.$message({
message: "删除成功",
type: "success",
});
}
return this.getContractTopicList(this.courseId);
})
}, },
saveRightNum() { saveRightNum() {
if (this.rightNum > this.questionList.length) {
this.$message({
message: "答对题目数应小于等于考试题目总数",
type: "warning",
});
return;
}
updateCourse({ contractorCourseId: this.courseId, qualifiedNum: this.rightNum }).then((res) => {
if (res.code == 200) {
this.$message({
message: "答题合格数修改成功",
type: "success",
});
}
}
);
}, },
saveAndNext() {
this.$refs.current.saveAndNext(); //保存承包商信息
}, saveContractTrian(){
updateCourse(this.$parent.contractTrainForm).then(res =>{
if(res.code == 200){
this.$message({
message: "培训信息修改成功",
type: "success",
});
this.$parent.getContractTrainList();
}
})
}
}, },
}; };
</script> </script>
...@@ -162,7 +284,7 @@ ...@@ -162,7 +284,7 @@
padding-bottom: 7px; padding-bottom: 7px;
margin-bottom: 20px; margin-bottom: 20px;
border-bottom: 1px solid #bbbbbb00; border-bottom: 1px solid #bbbbbb00;
.text { .text {
margin-top: 13px; margin-top: 13px;
margin-bottom: 32px; margin-bottom: 32px;
...@@ -179,7 +301,7 @@ ...@@ -179,7 +301,7 @@
margin-left: 10px; margin-left: 10px;
} }
} }
.right { .right {
width: 411px; width: 411px;
line-height: 28px; line-height: 28px;
...@@ -192,7 +314,7 @@ ...@@ -192,7 +314,7 @@
.table { .table {
flex: 1; flex: 1;
height: 0; height: 0;
flex-direction: column; flex-direction: column;
.th { .th {
width: 100%; width: 100%;
...@@ -200,7 +322,7 @@ ...@@ -200,7 +322,7 @@
line-height: 70px; line-height: 70px;
background: #f5f5f5; background: #f5f5f5;
color: #606266; color: #606266;
> div { > div {
height: 100%; height: 100%;
} }
...@@ -260,7 +382,7 @@ ...@@ -260,7 +382,7 @@
height: 55px; height: 55px;
box-sizing: border-box; box-sizing: border-box;
border: 1px solid #bbbbbb; border: 1px solid #bbbbbb;
line-height: 55px; line-height: 55px;
margin-right: 20px; margin-right: 20px;
> .left { > .left {
width: 140px; width: 140px;
...@@ -287,4 +409,3 @@ ...@@ -287,4 +409,3 @@
} }
} }
</style> </style>
\ No newline at end of file
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