【2.23第一轮测试-面授管理-开课】创建开课点击保存 一直转圈,无法创建成功

【生产环境-课程库-面授管理】点击“查看”预览,点击预览中的"下载"会从当前窗口打开,打开后没有返回按钮,无法返回上一级,操作不方便,优化一下
【2.23第一轮测试-学习路径图-任务】创建外部考试,显示保存成功,但是到任务列表中看不到此任务
This commit is contained in:
caozc
2023-02-24 00:35:13 +08:00
parent 0ddd27a33a
commit c7af808ac0
3 changed files with 631 additions and 1117 deletions

View File

@@ -219,6 +219,8 @@ export const cancelOrAuth = (obj) => http.post('/admin/certificate/cancelOrAuth'
export const allPoints = (obj) => http.get('/points/project/allPoints', { params: obj }) export const allPoints = (obj) => http.get('/points/project/allPoints', { params: obj })
export const updateStuCert = (obj) => http.post('/admin/certificate/updateStuCert', obj) export const updateStuCert = (obj) => http.post('/admin/certificate/updateStuCert', obj)
//添加外部考试
export const createExamination = (obj) => http.post('/examination/createExamination', obj)
// 外部考试导入成绩 // 外部考试导入成绩
export const ImportExternalExamScore = (obj) => http.post('/admin/external/exam/manage/importExternalExamScore', obj, { headers: { "Content-Type": "multipart/form-data" } }) export const ImportExternalExamScore = (obj) => http.post('/admin/external/exam/manage/importExternalExamScore', obj, { headers: { "Content-Type": "multipart/form-data" } })
//分组 //分组

View File

@@ -2,71 +2,45 @@
<div @click="openDrawer"> <div @click="openDrawer">
<slot></slot> <slot></slot>
</div> </div>
<a-drawer <a-drawer :visible="visible" class="drawerStyle addtestDrawer" width="800" placement="right">
:visible="visible"
class="drawerStyle addtestDrawer"
width="800"
placement="right"
>
<div class="drawerMain"> <div class="drawerMain">
<div class="header"> <div class="header">
<div class="headerTitle">{{ taskIndex >= 0 ? "编辑" : "添加" }}考试</div> <div class="headerTitle">{{ taskIndex >= 0 ? "编辑" : "添加" }}考试</div>
<img <img style="width: 29px; height: 29px; cursor: pointer" src="../../assets/images/basicinfo/close.png"
style="width: 29px; height: 29px; cursor: pointer" @click="closeDrawer" />
src="../../assets/images/basicinfo/close.png"
@click="closeDrawer"
/>
</div> </div>
<div style="display: flex; flex-direction: row; padding-top: 0px; margin-top: 20px; margin-left: 32px;"> <div style="display: flex; flex-direction: row; padding-top: 0px; margin-top: 20px; margin-left: 32px;">
<div> <div>
<button <button style="width: 100px; cursor: pointer;" @click="changeOuter(1)"
style="width: 100px; cursor: pointer;" :class="formData.examType === 1 ? 'outer' : 'notOuter'">
@click="changeOuter(1)"
:class="formData.examType === 1 ? 'outer' : 'notOuter'"
>
系统考试 系统考试
</button> </button>
<button <button :disabled="taskIndex >= 0" style="width: 100px; cursor: pointer;" @click="changeOuter(2)"
:disabled="taskIndex >= 0" :class="formData.examType === 2 ? 'outer' : 'notOuter'">
style="width: 100px; cursor: pointer;"
@click="changeOuter(2)"
:class="formData.examType === 2 ? 'outer' : 'notOuter'"
>
外部考试 外部考试
</button> </button>
</div> </div>
</div> </div>
<div v-if="formData.examType===1" class="contentMain"> <div v-if="formData.examType === 1" class="contentMain">
<div class="main_left"> <div class="main_left">
<div class="main_item"> <div class="main_item">
<div class="signbox"> <div class="signbox">
<div class="sign"> <div class="sign">
<img <img src="@/assets/images/coursewareManage/asterisk.png" alt="" />
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
</div> </div>
<span style="margin-right: 3px">考试名称</span> <span style="margin-right: 3px">考试名称</span>
</div> </div>
<div class="btnbox"> <div class="btnbox">
<a-input <a-input v-model:value="formData.examinationName" style="width: 400px; height: 40px; border-radius: 8px"
v-model:value="formData.examinationName" placeholder="请输入考试名称" :maxlength="20" :disabled="taskIndex >= 0" />
style="width: 400px; height: 40px; border-radius: 8px"
placeholder="请输入考试名称"
:maxlength="20"
:disabled="taskIndex >= 0"
/>
</div> </div>
</div> </div>
<div class="main_item"> <div class="main_item">
<div class="signbox"> <div class="signbox">
<div class="sign"> <div class="sign">
<img <img src="@/assets/images/coursewareManage/asterisk.png" alt="" />
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
</div> </div>
<span style="margin-right: 3px">选择试卷</span> <span style="margin-right: 3px">选择试卷</span>
</div> </div>
@@ -87,65 +61,40 @@
<div class="main_item"> <div class="main_item">
<div class="signbox"> <div class="signbox">
<div class="sign"> <div class="sign">
<img <img src="@/assets/images/coursewareManage/asterisk.png" alt="" />
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
</div> </div>
<span style="margin-right: 3px">考试时间</span> <span style="margin-right: 3px">考试时间</span>
</div> </div>
<div class="btnbox"> <div class="btnbox">
<a-range-picker <a-range-picker style="width: 400px; height: 40px; border-radius: 8px" :show-time="{ format: 'hh:mm' }"
style="width: 400px; height: 40px; border-radius: 8px" :disabled-date="disabledDate" format="YYYY-MM-DD HH:mm" valueFormat="YYYY-MM-DD HH:mm"
:show-time="{format:'hh:mm'}" v-model:value="dateTime" @change="timeChange" :placeholder="[' 开始时间', ' 结束时间']" />
:disabled-date="disabledDate"
format="YYYY-MM-DD HH:mm"
valueFormat="YYYY-MM-DD HH:mm"
v-model:value="dateTime"
@change="timeChange"
:placeholder="[' 开始时间', ' 结束时间']"
/>
</div> </div>
</div> </div>
<div class="main_item"> <div class="main_item">
<div class="signbox"> <div class="signbox">
<div class="sign"> <div class="sign">
<img <img src="@/assets/images/coursewareManage/asterisk.png" alt="" />
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
</div> </div>
<span style="margin-right: 3px">考试时长</span> <span style="margin-right: 3px">考试时长</span>
</div> </div>
<div class="select"> <div class="select">
<a-input-number <a-input-number :disabled="taskIndex >= 0" :min="0" :max="300" :precision="0"
:disabled="taskIndex >= 0" style="width: 400px; height: 40px; border-radius: 8px"
:min="0" v-model:value="formData.examinationDuration"></a-input-number>
:max="300"
:precision="0"
style="width: 400px; height: 40px; border-radius: 8px"
v-model:value="formData.examinationDuration"
></a-input-number>
<span style="color: #999999; margin-left: 8px">分钟</span> <span style="color: #999999; margin-left: 8px">分钟</span>
</div> </div>
</div> </div>
<div class="main_item"> <div class="main_item">
<div class="signbox"> <div class="signbox">
<div class="sign"> <div class="sign">
<img <img src="@/assets/images/coursewareManage/asterisk.png" alt="" />
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
</div> </div>
<span style="margin-right: 3px">及格线</span> <span style="margin-right: 3px">及格线</span>
</div> </div>
<div class="btnbox"> <div class="btnbox">
<a-input <a-input :disabled="taskIndex >= 0" v-model:value="formData.passLine" type="number"
:disabled="taskIndex >= 0" style="width: 400px; height: 40px; border-radius: 8px" />
v-model:value="formData.passLine"
type="number"
style="width: 400px; height: 40px; border-radius: 8px"
/>
<span style="color: #999999; margin-left: 8px"></span> <span style="color: #999999; margin-left: 8px"></span>
</div> </div>
@@ -155,15 +104,8 @@
<span style="margin-right: 3px">考试说明</span> <span style="margin-right: 3px">考试说明</span>
</div> </div>
<div class="textarea"> <div class="textarea">
<a-textarea <a-textarea :disabled="taskIndex >= 0" v-model:value="formData.examinationExplain" placeholder="请输入考试说明"
:disabled="taskIndex >= 0" allow-clear show-count :maxlength="200" :rows="6" />
v-model:value="formData.examinationExplain"
placeholder="请输入考试说明"
allow-clear
show-count
:maxlength="200"
:rows="6"
/>
</div> </div>
</div> </div>
<div class="main_item2"> <div class="main_item2">
@@ -174,21 +116,12 @@
<div class="setbox"> <div class="setbox">
<div class="timerbox"> <div class="timerbox">
<span>允许重复考试</span> <span>允许重复考试</span>
<a-input-number <a-input-number :disabled="taskIndex >= 0" :min="-1" :max="300" :precision="0" style="
:disabled="taskIndex >= 0" width: 100px;
:min="-1" height: 32px;
:max="300" border-radius: 8px;
:precision="0" overflow: hidden;" v-model:value="formData.examinationLimit"></a-input-number>
style=" <span style="color: #999999; margin-left: 8px">,-1表示无限制</span>
width: 100px;
height: 32px;
border-radius: 8px;
overflow: hidden;"
v-model:value="formData.examinationLimit"
></a-input-number>
<span style="color: #999999; margin-left: 8px"
>,-1表示无限制</span
>
</div> </div>
</div> </div>
</div> </div>
@@ -199,11 +132,7 @@
<span style="margin-right: 3px">显示答案</span> <span style="margin-right: 3px">显示答案</span>
</div> </div>
<div class="btnbox"> <div class="btnbox">
<a-radio-group <a-radio-group :disabled="taskIndex >= 0" style="margin-right: 12px" v-model:value="formData.showAnswers">
:disabled="taskIndex >= 0"
style="margin-right: 12px"
v-model:value="formData.showAnswers"
>
<a-radio :value="1">允许查看</a-radio> <a-radio :value="1">允许查看</a-radio>
<a-radio :value="2">不允许查看</a-radio> <a-radio :value="2">不允许查看</a-radio>
</a-radio-group> </a-radio-group>
@@ -214,11 +143,7 @@
<span style="margin-right: 3px">显示解析</span> <span style="margin-right: 3px">显示解析</span>
</div> </div>
<div class="btnbox"> <div class="btnbox">
<a-radio-group <a-radio-group :disabled="taskIndex >= 0" style="margin-right: 12px" v-model:value="formData.showAnalysis">
:disabled="taskIndex >= 0"
style="margin-right: 12px"
v-model:value="formData.showAnalysis"
>
<a-radio :value="1">允许查看</a-radio> <a-radio :value="1">允许查看</a-radio>
<a-radio :value="2">不允许查看</a-radio> <a-radio :value="2">不允许查看</a-radio>
</a-radio-group> </a-radio-group>
@@ -229,11 +154,7 @@
<span style="margin-right: 3px">评分模式</span> <span style="margin-right: 3px">评分模式</span>
</div> </div>
<div class="btnbox"> <div class="btnbox">
<a-radio-group <a-radio-group :disabled="taskIndex >= 0" style="margin-right: 12px" v-model:value="formData.scoringModel">
:disabled="taskIndex >= 0"
style="margin-right: 12px"
v-model:value="formData.scoringModel"
>
<a-radio :value="1">最高一次</a-radio> <a-radio :value="1">最高一次</a-radio>
<a-radio :value="2">最后一次</a-radio> <a-radio :value="2">最后一次</a-radio>
</a-radio-group> </a-radio-group>
@@ -246,11 +167,8 @@
<span style="margin-right: 3px">试题排列</span> <span style="margin-right: 3px">试题排列</span>
</div> </div>
<div class="btnbox"> <div class="btnbox">
<a-radio-group <a-radio-group :disabled="taskIndex >= 0" style="margin-right: 12px"
:disabled="taskIndex >= 0" v-model:value="formData.questionArrangement">
style="margin-right: 12px"
v-model:value="formData.questionArrangement"
>
<a-radio :value="1">试题乱序</a-radio> <a-radio :value="1">试题乱序</a-radio>
<a-radio :value="2">选项乱序</a-radio> <a-radio :value="2">选项乱序</a-radio>
<a-radio :value="3">全部乱序</a-radio> <a-radio :value="3">全部乱序</a-radio>
@@ -266,39 +184,25 @@
<div class="main_item"> <div class="main_item">
<div class="signbox"> <div class="signbox">
<div class="sign"> <div class="sign">
<img <img src="@/assets/images/coursewareManage/asterisk.png" alt="" />
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
</div> </div>
<span style="margin-right: 3px">考试名称</span> <span style="margin-right: 3px">考试名称</span>
</div> </div>
<div class="btnbox"> <div class="btnbox">
<a-input <a-input v-model:value="formData.examinationName" style="width: 400px; height: 40px; border-radius: 8px"
v-model:value="formData.examinationName" placeholder="请输入考试名称" :maxlength="20" />
style="width: 400px; height: 40px; border-radius: 8px"
placeholder="请输入考试名称"
:maxlength="20"
/>
</div> </div>
</div> </div>
<div class="main_item"> <div class="main_item">
<div class="signbox"> <div class="signbox">
<div class="sign"> <div class="sign">
<img <img src="@/assets/images/coursewareManage/asterisk.png" alt="" />
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
</div> </div>
<span style="margin-right: 3px">数据来源</span> <span style="margin-right: 3px">数据来源</span>
</div> </div>
<div class="btnbox"> <div class="btnbox">
<a-input <a-input v-model:value="formData.source" style="width: 400px; height: 40px; border-radius: 8px"
v-model:value="formData.source" placeholder="请输入数据来源" :maxlength="20" />
style="width: 400px; height: 40px; border-radius: 8px"
placeholder="请输入数据来源"
:maxlength="20"
/>
</div> </div>
</div> </div>
<div class="main_item2"> <div class="main_item2">
@@ -306,14 +210,8 @@
<span style="margin-right: 3px">考试说明</span> <span style="margin-right: 3px">考试说明</span>
</div> </div>
<div class="textarea"> <div class="textarea">
<a-textarea <a-textarea v-model:value="formData.externalExplain" placeholder="请输入考试说明" allow-clear show-count
v-model:value="formData.externalExplain" :maxlength="200" :rows="6" />
placeholder="请输入考试说明"
allow-clear
show-count
:maxlength="200"
:rows="6"
/>
</div> </div>
</div> </div>
</div> </div>
@@ -326,10 +224,11 @@
</a-drawer> </a-drawer>
</template> </template>
<script setup> <script setup>
import {defineEmits, defineProps, ref, watch} from "vue"; import { defineEmits, defineProps, ref, watch } from "vue";
import STest from "./SelectTest.vue"; import STest from "./SelectTest.vue";
import { createExamination } from "@/api/index1";
import dayjs from "dayjs"; import dayjs from "dayjs";
import {Form, message} from "ant-design-vue"; import { Form, message } from "ant-design-vue";
const props = defineProps({ const props = defineProps({
type: Number, type: Number,
@@ -410,7 +309,7 @@ const emit = defineEmits({})
const taskIndex = ref(-1); const taskIndex = ref(-1);
const dateTime = ref([]); const dateTime = ref([]);
const {resetFields, validate} = Form.useForm(formData, rulesRef); const { resetFields, validate } = Form.useForm(formData, rulesRef);
watch(() => formData.value.examType, () => { watch(() => formData.value.examType, () => {
formData.value.examType === 1 ? rulesRef.value = innerRule : rulesRef.value = outerRule formData.value.examType === 1 ? rulesRef.value = innerRule : rulesRef.value = outerRule
@@ -436,19 +335,26 @@ const disabledDate = (current) => {
// 系统考试 // 系统考试
async function confirm() { async function confirm() {
debugger // debugger
await validate().catch(({errorFields}) => { await validate().catch(({ errorFields }) => {
message.warning(errorFields[0].errors.join()); message.warning(errorFields[0].errors.join());
throw Error("数据校验不通过") throw Error("数据校验不通过")
}); });
if (taskIndex.value === -1) { if (taskIndex.value === -1) {
const list = props.taskList const list = props.taskList
list.push({name: formData.value.examinationName, type: props.type, info: {...formData.value}}) list.push({ name: formData.value.examinationName, type: props.type, info: { ...formData.value } })
} else { } else {
const data = props.taskList[taskIndex.value] const data = props.taskList[taskIndex.value]
data.name = formData.value.examinationName data.name = formData.value.examinationName
data.info = {...formData.value} data.info = { ...formData.value }
} }
let obj = formData.value;
createExamination(obj).then(res => {
console.log(res)
message.success("添加成功");
}).catch(err => {
console.log(err)
})
emit('update:taskList', [...props.taskList]) emit('update:taskList', [...props.taskList])
closeDrawer() closeDrawer()
} }
@@ -473,7 +379,7 @@ function changeOuter(v) {
formData.value.examType = v; formData.value.examType = v;
} }
defineExpose({openDrawer}) defineExpose({ openDrawer })
</script> </script>
<style lang="scss"> <style lang="scss">
.ant-table-striped :deep(.table-striped) td { .ant-table-striped :deep(.table-striped) td {
@@ -660,7 +566,7 @@ defineExpose({openDrawer})
padding-left: 5px !important; padding-left: 5px !important;
} }
.ant-table-thead > tr > th { .ant-table-thead>tr>th {
background-color: rgba(239, 244, 252, 1); background-color: rgba(239, 244, 252, 1);
} }
@@ -668,9 +574,7 @@ defineExpose({openDrawer})
background-color: #eff4fc !important; background-color: #eff4fc !important;
} }
.ant-table-tbody .ant-table-tbody>tr:hover:not(.ant-table-expanded-row):not(.ant-table-row-selected)>td {
> tr:hover:not(.ant-table-expanded-row):not(.ant-table-row-selected)
> td {
background: #f6f9fd; background: #f6f9fd;
} }

File diff suppressed because it is too large Load Diff