feaT:合并

This commit is contained in:
lixg
2023-03-05 15:42:47 +08:00
8 changed files with 107 additions and 44 deletions

View File

@@ -43,7 +43,7 @@
</div>
<div class="btnbox">
<a-input v-model:value="formData.examinationName" style="width: 400px; height: 40px; border-radius: 8px"
placeholder="请输入考试名称" :maxlength="20" :disabled="taskIndex >= 0" />
placeholder="请输入考试名称" :maxlength="20" :disabled="taskIndex >= 0 && isEdit" />
</div>
</div>
@@ -58,7 +58,7 @@
<a-tag closable color="processing" @close="delTag" :closeIcon="true">
<span style="font-size: 14px; line-height: 33px">{{ formData.examinationTestName }}</span>
</a-tag>
</div>
</div>
<s-test v-if="taskIndex < 0" v-model:id="formData.examinationPaperId" v-model:name="formData.examinationTestName">
<div class="btnbox">
<button class="xkbtn" style="margin:0" >
@@ -66,6 +66,13 @@
</button>
</div>
</s-test>
<s-test v-if="taskIndex >= 0 && isEdit==false" v-model:id="formData.examinationPaperId" v-model:name="formData.examinationTestName">
<div class="btnbox">
<button class="xkbtn" style="margin:0" >
{{ formData.examinationPaperId ? "重选" : "选择" }}试卷
</button>
</div>
</s-test>
</div>
<div class="main_item">
@@ -89,7 +96,7 @@
<span style="margin-right: 3px">考试时长</span>
</div>
<div class="select">
<a-input-number :disabled="taskIndex >= 0" :min="0" :max="300" :precision="0"
<a-input-number :disabled="taskIndex >= 0 && isEdit" :min="0" :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>
@@ -103,7 +110,7 @@
<span style="margin-right: 3px">及格线</span>
</div>
<div class="btnbox">
<a-input :disabled="taskIndex >= 0" v-model:value="formData.passLine" type="number"
<a-input :disabled="taskIndex >= 0 && isEdit" v-model:value="formData.passLine" type="number"
style="width: 400px; height: 40px; border-radius: 8px" />
<span style="color: #999999; margin-left: 8px"></span>
@@ -114,7 +121,7 @@
<span style="margin-right: 3px">考试说明</span>
</div>
<div class="textarea">
<a-textarea :disabled="taskIndex >= 0" v-model:value="formData.examinationExplain" placeholder="请输入考试说明"
<a-textarea :disabled="taskIndex >= 0 && isEdit" v-model:value="formData.examinationExplain" placeholder="请输入考试说明"
allow-clear show-count :maxlength="200" :rows="6" />
</div>
</div>
@@ -126,7 +133,7 @@
<div class="setbox">
<div class="timerbox">
<span>允许重复考试</span>
<a-input-number :disabled="taskIndex >= 0" :min="-1" :max="300" :precision="0" style="
<a-input-number :disabled="taskIndex >= 0 && isEdit" :min="-1" :max="300" :precision="0" style="
width: 100px;
height: 32px;
border-radius: 8px;
@@ -142,7 +149,7 @@
<span style="margin-right: 3px">显示答案</span>
</div>
<div class="btnbox">
<a-radio-group :disabled="taskIndex >= 0" style="margin-right: 12px" v-model:value="formData.showAnswers">
<a-radio-group :disabled="taskIndex >= 0 && isEdit" style="margin-right: 12px" v-model:value="formData.showAnswers">
<a-radio :value="1">允许查看</a-radio>
<a-radio :value="2">不允许查看</a-radio>
</a-radio-group>
@@ -153,7 +160,7 @@
<span style="margin-right: 3px">显示解析</span>
</div>
<div class="btnbox">
<a-radio-group :disabled="taskIndex >= 0" style="margin-right: 12px" v-model:value="formData.showAnalysis">
<a-radio-group :disabled="taskIndex >= 0 && isEdit" style="margin-right: 12px" v-model:value="formData.showAnalysis">
<a-radio :value="1">允许查看</a-radio>
<a-radio :value="2">不允许查看</a-radio>
</a-radio-group>
@@ -164,7 +171,7 @@
<span style="margin-right: 3px">评分模式</span>
</div>
<div class="btnbox">
<a-radio-group :disabled="taskIndex >= 0" style="margin-right: 12px" v-model:value="formData.scoringModel">
<a-radio-group :disabled="taskIndex >= 0 && isEdit" style="margin-right: 12px" v-model:value="formData.scoringModel">
<a-radio :value="1">最高一次</a-radio>
<a-radio :value="2">最后一次</a-radio>
</a-radio-group>
@@ -177,7 +184,7 @@
<span style="margin-right: 3px">试题排列</span>
</div>
<div class="btnbox">
<a-radio-group :disabled="taskIndex >= 0" style="margin-right: 12px"
<a-radio-group :disabled="taskIndex >= 0 && isEdit" style="margin-right: 12px"
v-model:value="formData.questionArrangement">
<a-radio :value="1">试题乱序</a-radio>
<a-radio :value="2">选项乱序</a-radio>
@@ -199,7 +206,7 @@
<span style="margin-right: 3px">考试名称</span>
</div>
<div class="btnbox">
<a-input v-model:value="formData.examinationName" style="width: 400px; height: 40px; border-radius: 8px" :disabled="taskIndex >= 0"
<a-input v-model:value="formData.examinationName" style="width: 400px; height: 40px; border-radius: 8px" :disabled="taskIndex >= 0 && isEdit"
placeholder="请输入考试名称" :maxlength="20" />
</div>
</div>
@@ -212,7 +219,7 @@
</div>
<div class="btnbox">
<a-input v-model:value="formData.source"
style="width: 400px; height: 40px; border-radius: 8px" :disabled="taskIndex >= 0"
style="width: 400px; height: 40px; border-radius: 8px" :disabled="taskIndex >= 0 && isEdit"
placeholder="请输入数据来源" show-count :maxlength="420" />
</div>
</div>
@@ -221,7 +228,7 @@
<span style="margin-right: 3px">考试说明</span>
</div>
<div class="textarea">
<a-textarea v-model:value="formData.externalExplain" placeholder="请输入考试说明" allow-clear show-count :disabled="taskIndex >= 0"
<a-textarea v-model:value="formData.externalExplain" placeholder="请输入考试说明" allow-clear show-count :disabled="taskIndex >= 0 && isEdit"
:maxlength="200" :rows="6" />
</div>
</div>
@@ -242,7 +249,8 @@ import { Form, message } from "ant-design-vue";
const props = defineProps({
type: Number,
taskList: []
taskList: [],
infoType: String
})
const visible = ref(false)
const initValue = {
@@ -318,6 +326,7 @@ const rulesRef = ref(innerRule);
const emit = defineEmits({})
const taskIndex = ref(-1);
const dateTime = ref([]);
let isEdit = ref(true);
const { resetFields, validate } = Form.useForm(formData, rulesRef);
@@ -366,6 +375,7 @@ async function confirm() {
function openDrawer(i, row) {
row && (props.infoType=='1'?(row.projectTaskId?row.projectTaskId==null?isEdit.value=false:isEdit.value=true:isEdit.value=false):(row.routerTaskId?row.routerTaskId==null?isEdit.value=false:isEdit.value=true:isEdit.value=false));
row && resetFields(row.info);
row && (dateTime.value = [row.info.examinationStartTime, row.info.examinationEndTime]);
(i >= 0) && (taskIndex.value = i);

View File

@@ -14,7 +14,7 @@
<iframe
id="iframe"
style="width: 100%; height: 600px"
:src="`${iframeUrl}/course/manages?f=choose?ref_id=${props.id}&ref_type=${props.type}`"
:src="`${iframeUrl}/course/manages?f=choose&ref_id=${props.id}&ref_type=${props.type}`"
name="myframe"
security="restricted"
sandbox="allow-forms allow-scripts allow-same-origin allow-popups"

View File

@@ -36,10 +36,11 @@
@change="handleChange"
:showUploadList="false"
:data="{
type: type,
targetId: Number(targetId),
chapterId: chapterId,
taskId: taskId,
type,
targetId,
chapterId,
taskId,
courseId,
}"
>
<p class="ant-upload-drag-icon">
@@ -66,7 +67,7 @@
<div class="tit">{{ fileName }}</div>
<div class="stateloading">正在上传</div>
</div>
<a-progress :percent="uploadpercent" />
<a-progress :percent="uploadpercent"/>
<!-- <div class="prog">
<div class="inprogloading"></div>
</div> -->
@@ -86,7 +87,7 @@
<div class="tit">{{ fileName }}</div>
<div class="statedefeat">上传失败</div>
</div>
<a-progress :percent="uploadpercent" />
<a-progress :percent="uploadpercent"/>
<!-- <div class="prog">
<div class="inprogdefeat"></div>
</div> -->
@@ -121,7 +122,7 @@
<div class="tit">{{ fileName }}</div>
<div class="statesucce">上传成功</div>
</div>
<a-progress :percent="uploadpercent" />
<a-progress :percent="uploadpercent"/>
<!-- <div class="prog">
<div class="inprogsucce"></div>
</div> -->
@@ -185,15 +186,16 @@
</div>
<!-- 加载动画 -->
<div class="aeLoading" :style="{ display: addLoading ? 'flex' : 'none' }">
<a-spin :spinning="addLoading" tip="" />
<a-spin :spinning="addLoading" tip=""/>
</div>
</a-drawer>
</template>
<script>
import { reactive, toRefs } from "vue";
import { message } from "ant-design-vue";
<script>
import {reactive, toRefs} from "vue";
import {message} from "ant-design-vue";
import * as api from "../../api/index1";
import { BATCH_IMPORT_SCORE } from "@/api/config";
import {BATCH_IMPORT_SCORE} from "@/api/config";
export default {
name: "EScore",
props: {
@@ -218,6 +220,10 @@ export default {
type: Number,
default: null,
},
courseId: {
type: Number,
default: null,
},
chapterId: {
type: Number,
default: null,
@@ -384,9 +390,9 @@ export default {
window.open(process.env.VUE_APP_FILE_PATH + state.downloadErrUrl);
}
};
function downTemplate() {
console.log(state.locationHref + state.template);
window.open(state.locationHref + state.template);
window.open(process.env.VUE_APP_FILE_PATH + process.env.VUE_APP_UP_LOAD_STUDENT_SCORE_TEMPLATE);
}
return {
@@ -404,8 +410,8 @@ export default {
},
};
</script>
<style lang="scss">
<style lang="scss">
.ExportScoreExternalExternal {
.drawerMain {
min-width: 600px;
@@ -413,6 +419,7 @@ export default {
overflow-x: auto;
display: flex;
flex-direction: column;
.header {
height: 73px;
border-bottom: 1px solid #e8e8e8;
@@ -422,6 +429,7 @@ export default {
// background-color: red;
margin-bottom: 20px;
flex-shrink: 0;
.headerTitle {
font-size: 18px;
font-weight: 600;
@@ -430,15 +438,19 @@ export default {
// margin-left: 24px;
}
}
.main {
overflow-y: auto;
.minatitl {
display: flex;
.up1 {
font-size: 16px;
font-weight: 400;
color: #333333;
}
.up2 {
font-size: 16px;
font-weight: 400;
@@ -446,16 +458,20 @@ export default {
margin-left: 4px;
}
}
.upload {
margin-top: 32px;
display: flex;
.text {
font-size: 14px;
font-weight: 400;
color: #333333;
}
.right {
margin-left: 6px;
.load {
width: 500px;
height: 176px;
@@ -467,12 +483,14 @@ export default {
flex-direction: column;
align-items: center;
margin-bottom: 20px;
.cloud {
margin-top: 52px;
width: 28px;
height: 28px;
background-image: url(../../assets/images/basicinfo/cloud.png);
}
.tip {
font-size: 14px;
font-weight: 400;
@@ -480,6 +498,7 @@ export default {
margin-top: 15px;
cursor: pointer;
}
.tipz {
font-size: 14px;
font-weight: 400;
@@ -487,6 +506,7 @@ export default {
margin-top: 10px;
}
}
.loadstate {
width: 500px;
margin-bottom: 100px;
@@ -501,10 +521,12 @@ export default {
flex-direction: column;
justify-content: center;
position: relative;
.content {
display: flex;
margin-left: 20px;
position: relative;
.defeat {
width: 400px;
position: absolute;
@@ -514,14 +536,17 @@ export default {
font-weight: 500;
justify-content: space-between;
}
.img {
width: 30px;
height: 34px;
background-image: url(../../assets/images/basicinfo/exl.png);
}
.timebox {
margin-left: 15px;
margin-top: -5px;
.timetop {
display: flex;
width: 262px;
@@ -532,27 +557,32 @@ export default {
font-weight: 400;
color: #333333;
}
.stateloading {
font-size: 14px;
font-weight: 400;
color: #4ea6ff;
}
.statedefeat {
font-size: 14px;
font-weight: 400;
color: #ff7474;
}
.statesucce {
font-size: 14px;
font-weight: 400;
color: #35ae69;
}
}
.prog {
width: 262px;
height: 5px;
background: #eaf1fe;
border-radius: 4px;
.inprogloading {
width: 55%;
height: 5px;
@@ -560,6 +590,7 @@ export default {
background: #4ea6ff;
}
//下载失败条
.inprogdefeat {
width: 55%;
@@ -568,6 +599,7 @@ export default {
background: #ff7474;
}
//下载成功条
.inprogsucce {
width: 100%;
@@ -578,15 +610,18 @@ export default {
}
}
}
.curloading {
margin-left: 15px;
margin-top: 15px;
display: flex;
.cur {
font-size: 14px;
font-weight: 400;
color: #333333;
}
.cancel {
font-size: 14px;
font-weight: 400;
@@ -594,6 +629,7 @@ export default {
}
}
}
.downloadErr {
width: 120px;
height: 32px;
@@ -617,6 +653,7 @@ export default {
}
}
}
.btnn {
height: 72px;
width: 100%;
@@ -628,6 +665,7 @@ export default {
align-items: center;
justify-content: center;
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.16);
.btn1 {
width: 100px;
height: 40px;
@@ -637,6 +675,7 @@ export default {
background-color: #fff;
cursor: pointer;
}
.btn2 {
cursor: pointer;
width: 100px;

View File

@@ -118,9 +118,10 @@
<ExportAchievement
@closeDraw="closeDraw"
v-model:eScorevisibleExternalExternal="eScorevisibleExternalExternal"
:type="2"
:type="1"
:targetId="datasource.projectId"
:taskId="datasource.courseId"
:courseId="datasource.courseId"
:taskId="datasource.id"
:chapterId="datasource.stageId" />
</a-drawer>
</template>
@@ -396,8 +397,9 @@
status: state.projectName,
studentName: state.name,
targetId: props.datasource.projectId,
taskId: props.datasource.courseId,
type: 2,
courseId: props.datasource.courseId,
taskId: props.datasource.id,
type: 1,
}).then(res=>{
console.log(res)
state.tabledata = res.data.data.records;
@@ -428,7 +430,7 @@
{/* 导出数据 */}
function exportData() {
window.open(`${process.env.VUE_APP_BASE_API}/admin/external/exam/manage/exportExternalExam?chapterId=${props.datasource.stageId}&type=${2}&targetId=${props.datasource.projectId}&taskId=${props.datasource.projectTaskId}`)
window.open(`${process.env.VUE_APP_BASE_API}/admin/external/exam/manage/exportExternalExam?chapterId=${props.datasource.stageId}&type=${1}&targetId=${props.datasource.projectId}&taskId=${props.datasource.id}&courseId=${props.datasource.courseId}`)
}
const closeDraw = (e) => {

View File

@@ -117,9 +117,10 @@
<ExportAchievement
@closeDraw="closeDraw"
v-model:eScorevisibleExternalExternal="eScorevisibleExternalExternal"
:type="1"
:type="2"
:targetId="datasource.routerId"
:taskId="datasource.courseId"
:courseId="datasource.courseId"
:taskId="datasource.id"
:chapterId="datasource.chapterId" />
</a-drawer>
</template>
@@ -397,6 +398,7 @@
// 获取数据
function getData() {
state.loadingData = true;
console.log(JSON.stringify(props.datasource))
api.QueryExternalExamManageDetail({
chapterId: props.outchapter,
pageNo: state.currentPage,
@@ -404,8 +406,9 @@
status: state.projectName,
studentName: state.name,
targetId: props.datasource.routerId,
taskId: props.datasource.courseId,
type: 1,
taskId: props.datasource.id,
courseId: props.datasource.courseId,
type: 2,
}).then(res=>{
console.log(res)
state.tabledata = res.data.data.records;
@@ -437,7 +440,7 @@
{/* 导出数据 */}
function exportData() {
window.open(`${process.env.VUE_APP_BASE_API}/admin/external/exam/manage/exportExternalExam?chapterId=${props.datasource.chapterId}&type=${1}&targetId=${props.datasource.routerId}&taskId=${props.datasource.courseId}`)
window.open(`${process.env.VUE_APP_BASE_API}/admin/external/exam/manage/exportExternalExam?chapterId=${props.datasource.chapterId}&type=${2}&targetId=${props.datasource.routerId}&taskId=${props.datasource.id}&courseId=${props.datasource.courseId}`)
}
return {
...toRefs(state),

View File

@@ -689,13 +689,18 @@ function bathDel() {
const deleteModalVisible = ref(false);
const deleteId = ref(null);
const deleteTargetId = ref(null);
const deleteType = ref(null);
function del(id, row) {
debugger
if (row.isLeader === "1") {
return message.warning("" + row.name + "是小组长,请勿删除!");
}
deleteModalVisible.value = true;
deleteId.value = id;
deleteTargetId.value = row.pid;
deleteType.value = row.type
// Modal.confirm({
// title: () => "确定删除?",
// icon: () => createVNode(ExclamationCircleOutlined),
@@ -717,7 +722,7 @@ function del(id, row) {
const sureSameModal = () => {
if (deleteId.value) {
tableData.value.loading = true;
delStudentList({ ids: [deleteId.value] }).then(() => getStuList());
delStudentList({ ids: [deleteId.value],targetId: deleteTargetId.value,type:deleteType.value}).then(() => getStuList());
deleteModalVisible.value = false;
}
};
@@ -725,6 +730,8 @@ const sureSameModal = () => {
const closeSameModal = () => {
deleteModalVisible.value = false;
deleteId.value = null;
deleteTargetId.value = null;
deleteType.value = null;
};
function submitCall(flag) {

View File

@@ -558,6 +558,7 @@ const submitStorage = async () => {
await releaseRouter(routerId);
message.success("关卡和任务数据已保存");
confirmLoading.value = false;
getDetail();
},
});
return;

View File

@@ -606,7 +606,8 @@ const submitStorage = async () => {
confirmLoading.value = true
await request(PROJECT_RELEASE, {projectId: route.query.projectId})
message.success("保存成功");
confirmLoading.value = false
confirmLoading.value = false;
getTask();
},
})
return