feat:合并

This commit is contained in:
lixg
2022-12-06 16:13:44 +08:00
parent 22a65426f3
commit ebc8ade5f9
2 changed files with 282 additions and 282 deletions

View File

@@ -1,18 +1,18 @@
<template>
<a-drawer
:visible="addtestVisible"
class="drawerStyle addtestDrawer"
width="80%"
placement="right"
@after-visible-change="afterVisibleChange"
:visible="addtestVisible"
class="drawerStyle addtestDrawer"
width="80%"
placement="right"
@after-visible-change="afterVisibleChange"
>
<div class="drawerMain">
<div class="header">
<div class="headerTitle">{{ edit ? "编辑" : "添加" }}考试</div>
<img
style="width: 29px; height: 29px; cursor: pointer"
src="../../assets/images/basicinfo/close.png"
@click="closeDrawer2"
style="width: 29px; height: 29px; cursor: pointer"
src="../../assets/images/basicinfo/close.png"
@click="closeDrawer2"
/>
</div>
<!-- 2022-11-30注释 后面放开 修改div的padding-topL:32 -->
@@ -34,127 +34,130 @@
</button> -->
</div>
<a-form
v-if="isOuter == 1"
ref="formRef"
name="custom-validation"
:model="formState"
:rules="rules"
v-bind="layout"
@finish="handleFinish"
@validate="handleValidate"
@finishFailed="handleFinishFailed"
v-if="isOuter == 1"
ref="formRef"
name="custom-validation"
:model="formState"
:rules="rules"
v-bind="layout"
@finish="handleFinish"
@validate="handleValidate"
@finishFailed="handleFinishFailed"
>
<div class="contentMain">
<div class="main_left">
<div class="main_item">
<div class="btnbox">
<div class="sign" style="margin-bottom:24px">
<img
<div class="sign" style="margin-bottom: 24px">
<img
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
</div>
/>
</div>
<a-form-item
has-feedback
label="考试名称"
name="examinationName"
has-feedback
label="考试名称"
name="examinationName"
>
<a-input
v-model:value="formState.examinationName"
style="width: 424px; height: 32px; margin-left: 35px"
autocomplete="off"
placeholder="请输入考试名称"
show-count :maxlength="20"
v-model:value="formState.examinationName"
style="width: 424px; height: 32px; margin-left: 35px"
autocomplete="off"
placeholder="请输入考试名称"
show-count
:maxlength="20"
/>
</a-form-item>
</div>
</div>
<div class="main_item2">
<a-form-item
has-feedback
label="考试说明"
name="examinationExplain"
has-feedback
label="考试说明"
name="examinationExplain"
>
<div class="textarea">
<a-textarea
v-model:value="formState.examinationExplain"
placeholder="请输入考试说明"
allow-clear
:rows="6"
style="margin-left: 35px"
show-count :maxlength="200"
v-model:value="formState.examinationExplain"
placeholder="请输入考试说明"
allow-clear
:rows="6"
style="margin-left: 35px"
show-count
:maxlength="200"
/>
</div>
</a-form-item>
</div>
<div class="main_item">
<div class="btnbox">
<div class="sign" style="margin-bottom:24px">
<img
<div class="sign" style="margin-bottom: 24px">
<img
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
</div>
/>
</div>
<a-form-item has-feedback label="选择考试" name="choosedTest">
<a-button
type="primary"
style="width: 100px; margin-left: 35px"
class="outer"
@click.prevent
@click="selectTest()"
type="primary"
style="width: 100px; margin-left: 35px"
class="outer"
@click.prevent
@click="selectTest()"
>
选择考试
</a-button>
<a-tag v-if="paperName != ''" closable color="processing" @close="delTag">
<span style="font-size:14px;line-height: 33px;">{{paperName}}</span>
<a-tag
v-if="paperName != ''"
closable
color="processing"
@close="delTag"
>
<span style="font-size: 14px; line-height: 33px">{{
paperName
}}</span>
</a-tag>
</a-form-item>
</div>
</div>
<div class="main_item">
<div class="btnbox">
<div class="sign" style="margin-bottom:24px">
<img
<div class="sign" style="margin-bottom: 24px">
<img
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
</div>
/>
</div>
<a-form-item has-feedback label="考试时间" name="choosedTime">
<a-range-picker
v-model:value="formState.choosedTime"
format="YYYY-MM-DD"
style="width: 424px; margin-left: 35px"
:placeholder="[' 开始时间', ' 结束时间']"
v-model:value="formState.choosedTime"
format="YYYY-MM-DD"
style="width: 424px; margin-left: 35px"
:placeholder="[' 开始时间', ' 结束时间']"
/>
</a-form-item>
</div>
</div>
<div class="main_item">
<div class="btnbox">
<div class="sign" style="margin-bottom:24px">
<img
<div class="sign" style="margin-bottom: 24px">
<img
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
</div>
/>
</div>
<a-form-item
has-feedback
label="考试时长"
name="examinationDuration"
has-feedback
label="考试时长"
name="examinationDuration"
>
<a-input
v-model:value="formState.examinationDuration"
type="number"
style="width: 388px; height: 32px; margin-left: 35px"
v-model:value="formState.examinationDuration"
type="number"
style="width: 388px; height: 32px; margin-left: 35px"
/>
</a-form-item>
<span style="transform: translateY(-50%)">分钟</span>
@@ -164,16 +167,16 @@
<div class="btnbox">
<span style="margin-right: 43px">考试限制</span>
<a-form-item
has-feedback
label="允许重复考试"
name="examinationLimit"
has-feedback
label="允许重复考试"
name="examinationLimit"
>
<a-input-number
:min="-1"
:precision="0"
type="number"
v-model:value="formState.examinationLimit"
style="
:min="-1"
:precision="0"
type="number"
v-model:value="formState.examinationLimit"
style="
width: 88px;
height: 32px;
border-radius: 8px;
@@ -182,7 +185,7 @@
/>
<span style="margin-left: 8px"></span>
<span style="margin-left: 24px; color: #999999"
>-1表示无限制</span
>-1表示无限制</span
>
</a-form-item>
</div>
@@ -191,23 +194,21 @@
<div class="btnbox">
<a-form-item has-feedback label="显示答案" name="showAnswers">
<a-radio-group
style="margin-left: 35px; margin-right: 12px"
v-model:value="formState.showAnswers"
style="margin-left: 35px; margin-right: 12px"
v-model:value="formState.showAnswers"
>
<a-radio
v-model:checked="checked"
:value="1"
@click="cloradio1"
>允许查看
</a-radio
>
v-model:checked="checked"
:value="1"
@click="cloradio1"
>允许查看
</a-radio>
<a-radio
v-model:checked="checked"
:value="2"
@click="cloradio1"
>不允许查看
</a-radio
>
v-model:checked="checked"
:value="2"
@click="cloradio1"
>不允许查看
</a-radio>
</a-radio-group>
</a-form-item>
</div>
@@ -216,23 +217,21 @@
<div class="btnbox">
<a-form-item has-feedback label="显示解析" name="showAnalysis">
<a-radio-group
style="margin-left: 35px; margin-right: 12px"
v-model:value="formState.showAnalysis"
style="margin-left: 35px; margin-right: 12px"
v-model:value="formState.showAnalysis"
>
<a-radio
v-model:checked="checked"
:value="1"
@click="cloradio2"
>允许查看
</a-radio
>
v-model:checked="checked"
:value="1"
@click="cloradio2"
>允许查看
</a-radio>
<a-radio
v-model:checked="checked"
:value="2"
@click="cloradio2"
>不允许查看
</a-radio
>
v-model:checked="checked"
:value="2"
@click="cloradio2"
>不允许查看
</a-radio>
</a-radio-group>
</a-form-item>
</div>
@@ -241,23 +240,21 @@
<div class="btnbox">
<a-form-item has-feedback label="评分模式" name="scoringModel">
<a-radio-group
style="margin-left: 35px; margin-right: 12px"
v-model:value="formState.scoringModel"
style="margin-left: 35px; margin-right: 12px"
v-model:value="formState.scoringModel"
>
<a-radio
v-model:checked="checked"
:value="1"
@click="cloradio3"
>最高一次
</a-radio
>
v-model:checked="checked"
:value="1"
@click="cloradio3"
>最高一次
</a-radio>
<a-radio
v-model:checked="checked"
:value="2"
@click="cloradio3"
>最后一次
</a-radio
>
v-model:checked="checked"
:value="2"
@click="cloradio3"
>最后一次
</a-radio>
</a-radio-group>
</a-form-item>
</div>
@@ -266,9 +263,9 @@
<div class="btnbox">
<a-form-item has-feedback label="及格线" name="passLine">
<a-input
v-model:value="formState.passLine"
type="number"
style="width: 88px; height: 32px; margin-left: 35px"
v-model:value="formState.passLine"
type="number"
style="width: 88px; height: 32px; margin-left: 35px"
/>
</a-form-item>
<span style="margin-left: 8px"></span>
@@ -277,35 +274,32 @@
<div class="main_item">
<div class="btnbox">
<a-form-item
has-feedback
label="作业要求"
name="questionArrangement"
has-feedback
label="作业要求"
name="questionArrangement"
>
<a-radio-group
style="margin-right: 12px"
v-model:value="formState.questionArrangement"
style="margin-right: 12px"
v-model:value="formState.questionArrangement"
>
<a-radio
v-model:checked="checked"
:value="1"
@click="cloradio4"
>试题乱序
</a-radio
>
v-model:checked="checked"
:value="1"
@click="cloradio4"
>试题乱序
</a-radio>
<a-radio
v-model:checked="checked"
:value="2"
@click="cloradio4"
>试题排
</a-radio
>
v-model:checked="checked"
:value="2"
@click="cloradio4"
>选项乱
</a-radio>
<a-radio
v-model:checked="checked"
:value="3"
@click="cloradio4"
>全部乱序
</a-radio
>
v-model:checked="checked"
:value="3"
@click="cloradio4"
>全部乱序
</a-radio>
</a-radio-group>
</a-form-item>
</div>
@@ -318,31 +312,32 @@
</div>
</a-form>
<a-form
v-else
ref="formRef"
name="custom-validation"
:model="formState"
:rules="rules"
v-bind="layout"
@finish="handleFinish"
@validate="handleValidate"
@finishFailed="handleFinishFailed"
v-else
ref="formRef"
name="custom-validation"
:model="formState"
:rules="rules"
v-bind="layout"
@finish="handleFinish"
@validate="handleValidate"
@finishFailed="handleFinishFailed"
>
<div class="contentMain">
<div class="main_left">
<div class="main_item">
<div class="btnbox">
<a-form-item
has-feedback
label="考试名称"
name="examinationName"
has-feedback
label="考试名称"
name="examinationName"
>
<a-input
v-model:value="formState.examinationName"
style="width: 424px; height: 32px; margin-left: 35px"
autocomplete="off"
placeholder="请输入考试名称"
show-count :maxlength="20"
v-model:value="formState.examinationName"
style="width: 424px; height: 32px; margin-left: 35px"
autocomplete="off"
placeholder="请输入考试名称"
show-count
:maxlength="20"
/>
</a-form-item>
</div>
@@ -350,16 +345,17 @@
<div class="main_item">
<div class="btnbox">
<a-form-item
has-feedback
label="数据来源"
name="examinationName"
has-feedback
label="数据来源"
name="examinationName"
>
<a-input
v-model:value="请输入数据来源"
style="width: 424px; height: 32px; margin-left: 35px"
autocomplete="off"
placeholder="数据来源"
show-count :maxlength="20"
v-model:value="请输入数据来源"
style="width: 424px; height: 32px; margin-left: 35px"
autocomplete="off"
placeholder="数据来源"
show-count
:maxlength="20"
/>
</a-form-item>
</div>
@@ -367,18 +363,19 @@
<div class="main_item2">
<a-form-item
has-feedback
label="考试说明"
name="examinationExplain"
has-feedback
label="考试说明"
name="examinationExplain"
>
<div class="textarea">
<a-textarea
v-model:value="formState.examinationExplain"
placeholder="请输入考试说明"
allow-clear
:rows="6"
style="margin-left: 35px"
show-count :maxlength="200"
v-model:value="formState.examinationExplain"
placeholder="请输入考试说明"
allow-clear
:rows="6"
style="margin-left: 35px"
show-count
:maxlength="200"
/>
</div>
</a-form-item>
@@ -393,23 +390,23 @@
</div>
<!-- 加载动画 -->
<div class="aeLoading" :style="{ display: addLoading ? 'flex' : 'none' }">
<a-spin :spinning="addLoading" tip="添加中..."/>
<a-spin :spinning="addLoading" tip="添加中..." />
</div>
<!-- 选择考试抽屉 -->
<s-test v-model:STvisible="STvisible" @getSTData="getData"/>
<s-test v-model:STvisible="STvisible" @getSTData="getData" />
</a-drawer>
</template>
<script>
import {reactive, ref, toRefs} from "vue";
import {message} from "ant-design-vue";
import { reactive, ref, toRefs } from "vue";
import { message } from "ant-design-vue";
import {
createExamination,
queryExaminationDetailById,
updateExamination,
} from "@/api/indexExam";
import STest from "./SelectTest.vue";
import {ProjectEditTask, RouterEditTask} from "@/api/indexTask";
import {addTempTask} from "../../api/indexTaskadd";
import { ProjectEditTask, RouterEditTask } from "@/api/indexTask";
import { addTempTask } from "../../api/indexTaskadd";
import dayjs from "dayjs";
export default {
@@ -470,7 +467,7 @@ export default {
type: Number,
default: null,
},
testName:{
testName: {
type: String,
default: null,
},
@@ -499,12 +496,12 @@ export default {
paperName: "", //试卷名称 子组件传过来给考试抽屉选择试卷后框框用
id: "",
testName: "",
TestName:"",
testObj:{
name:"",
paperId:"",
choosedTime:"",
duration:""
TestName: "",
testObj: {
name: "",
paperId: "",
choosedTime: "",
duration: "",
},
choosedTestList: [
{
@@ -529,7 +526,7 @@ export default {
updateTest();
};
const handleFinishFailed = () => {
// message.error("handleFinishFailed");
// message.error("handleFinishFailed");
};
const resetForm = () => {
formRef.value.resetFields();
@@ -542,12 +539,12 @@ export default {
console.log(args);
};
const closeDrawer = () => {
console.log('closeDrawer')
console.log("closeDrawer");
formState.choosedTime = "";
ctx.emit("update:addtestVisible", false);
ctx.emit("update:edit", false);
ctx.emit("update:EditTestId", state.EditTestId);
ctx.emit("update:testName", state.testName);
ctx.emit("update:testName", state.testName);
console.log("formState.testName", state.testName);
localStorage.setItem("stageId", props.chooseStageId);
localStorage.setItem("chapterId", props.isactive);
@@ -560,7 +557,7 @@ export default {
resetForm();
};
const afterVisibleChange = () => {
console.log('props', props)
console.log("props", props);
if (props.addtestVisible && props.edit) {
// 该页面显示同时 edit为true 时,发送查询请求,
queryTest();
@@ -575,45 +572,45 @@ export default {
};
const queryTest = () => {
// state.addLoading = true;
queryExaminationDetailById({examinationId: props.EditTestId})
.then((res) => {
formState.examinationName = res.data.data.examinationName;
formState.workRequirement = res.data.data.workRequirement;
formState.examinationDuration = res.data.data.examinationDuration;
formState.examinationLimit =
Number(res.data.data.examinationLimit) || -1;
formState.passLine = res.data.data.passLine;
formState.examinationExplain = res.data.data.examinationExplain;
formState.questionArrangement =
Number(res.data.data.questionArrangement) || 1;
formState.scoringModel = Number(res.data.data.scoringModel) || 1;
formState.showAnalysis = Number(res.data.data.showAnalysis) || 1;
formState.showAnswers = Number(res.data.data.showAnswers) || 1;
formState.papaerName = res.data.data.examinationTestName;
state.paperName = res.data.data.examinationTestName;
if (
res.data.data.examinationEndTime &&
res.data.data.examinationStartTime
) {
formState.choosedTime = [
dayjs(res.data.data.examinationStartTime, "YYYY-MM-DD"),
dayjs(res.data.data.examinationEndTime, "YYYY-MM-DD"),
];
state.addLoading = false;
} else {
formState.choosedTime = [];
}
})
.catch(() => {
//message.error(`查询失败`);
});
queryExaminationDetailById({ examinationId: props.EditTestId })
.then((res) => {
formState.examinationName = res.data.data.examinationName;
formState.workRequirement = res.data.data.workRequirement;
formState.examinationDuration = res.data.data.examinationDuration;
formState.examinationLimit =
Number(res.data.data.examinationLimit) || -1;
formState.passLine = res.data.data.passLine;
formState.examinationExplain = res.data.data.examinationExplain;
formState.questionArrangement =
Number(res.data.data.questionArrangement) || 1;
formState.scoringModel = Number(res.data.data.scoringModel) || 1;
formState.showAnalysis = Number(res.data.data.showAnalysis) || 1;
formState.showAnswers = Number(res.data.data.showAnswers) || 1;
formState.papaerName = res.data.data.examinationTestName;
state.paperName = res.data.data.examinationTestName;
if (
res.data.data.examinationEndTime &&
res.data.data.examinationStartTime
) {
formState.choosedTime = [
dayjs(res.data.data.examinationStartTime, "YYYY-MM-DD"),
dayjs(res.data.data.examinationEndTime, "YYYY-MM-DD"),
];
state.addLoading = false;
} else {
formState.choosedTime = [];
}
})
.catch(() => {
//message.error(`查询失败`);
});
};
const updateTest = () => {
//state.addLoading = true;updateTask
let obj = {
examinationDuration: formState.examinationDuration,
examinationEndTime: dayjs(formState.choosedTime[1]).format(
"YYYY-MM-DD"
"YYYY-MM-DD"
),
examinationExplain: formState.examinationExplain,
examinationId: props.edit ? props.EditTestId : 0,
@@ -622,7 +619,7 @@ export default {
examinationPaperId: 0,
// examinationPaperName: formState.choosedTest,
examinationStartTime: dayjs(formState.choosedTime[0]).format(
"YYYY-MM-DD"
"YYYY-MM-DD"
),
passLine: formState.passLine,
questionArrangement: formState.questionArrangement,
@@ -632,7 +629,7 @@ export default {
examinationTestId: state.paperId,
examinationTestName: state.paperName,
};
if (!formState.examinationName) {
message.destroy();
return message.warning("请输入考试名称");
@@ -649,29 +646,29 @@ export default {
message.destroy();
return message.warning("请输入考试时长");
}
if (props.edit) {
// 编辑任务
updateExamination(obj)
.then(async (res) => {
await updateTask(res);
closeDrawer();
})
.catch(() => {
message.destroy();
message.error(`编辑失败`);
});
.then(async (res) => {
await updateTask(res);
closeDrawer();
})
.catch(() => {
message.destroy();
message.error(`编辑失败`);
});
} else {
// 创建任务
createExamination(obj)
.then(async (res) => {
await updateTask(res);
closeDrawer();
})
.catch(() => {
message.destroy();
message.error(`创建失败`);
});
.then(async (res) => {
await updateTask(res);
closeDrawer();
})
.catch(() => {
message.destroy();
message.error(`创建失败`);
});
}
};
const updateTask = (res) => {
@@ -690,15 +687,15 @@ export default {
type: 5,
};
RouterEditTask(editObj1)
.then(() => {
//message.success(`${props.edit ? "编辑" : "新增"}关卡任务成功`);
ctx.emit("changeData", false);
state.addLoading = false;
closeDrawer();
})
.catch(() => {
//message.error(`${props.edit ? "编辑" : "新增"}关卡任务失败`);
});
.then(() => {
//message.success(`${props.edit ? "编辑" : "新增"}关卡任务成功`);
ctx.emit("changeData", false);
state.addLoading = false;
closeDrawer();
})
.catch(() => {
//message.error(`${props.edit ? "编辑" : "新增"}关卡任务失败`);
});
} else if (props.isLevel == 2) {
let editObj = {
courseId: res.data.data.examinationId,
@@ -711,13 +708,13 @@ export default {
};
// 新增编辑或新增项目
ProjectEditTask(editObj)
.then(() => {
//message.success(`${props.EditTestId ? "编辑" : "新增"}阶段任务成功`);
ctx.emit("changeData", false);
})
.catch(() => {
//message.error(`${props.EditTestId ? "编辑" : "新增"}阶段任务失败`);
});
.then(() => {
//message.success(`${props.EditTestId ? "编辑" : "新增"}阶段任务成功`);
ctx.emit("changeData", false);
})
.catch(() => {
//message.error(`${props.EditTestId ? "编辑" : "新增"}阶段任务失败`);
});
} else if (props.isLevel == 3) {
addTempTask({
courseId: res.data.data.examinationId,
@@ -728,13 +725,13 @@ export default {
stageId: props.chooseStageId || 0,
type: 5,
})
.then(() => {
//message.success( `${props.EditTestId ? "编辑" : "新增"}阶段任务成功`);
ctx.emit("changeData", false);
})
.catch(() => {
//message.error(`${props.EditTestId ? "编辑" : "新增"}阶段任务失败`);
});
.then(() => {
//message.success( `${props.EditTestId ? "编辑" : "新增"}阶段任务成功`);
ctx.emit("changeData", false);
})
.catch(() => {
//message.error(`${props.EditTestId ? "编辑" : "新增"}阶段任务失败`);
});
}
}
};
@@ -761,12 +758,10 @@ export default {
const changeOuter = (value) => {
state.isOuter = value;
};
const chooseTest = () => {
};
const chooseTest = () => {};
const closeTag = (removedTag) => {
const tags = state.choosedTestList.filter(
(item) => item.key != removedTag
(item) => item.key != removedTag
);
state.choosedTestList = tags;
};
@@ -795,7 +790,7 @@ export default {
formRef,
delTag,
// layout,
updateTest,
queryTest,
changeOuter,