mirror of
https://codeup.aliyun.com/67762337eccfc218f6110e0e/vue/fe-manage.git
synced 2025-12-14 21:36:44 +08:00
Merge branch 'develop' of http://gitlab.dongwu-inc.com:10080/BOE/fe-manage into develop
This commit is contained in:
@@ -445,6 +445,7 @@ export default {
|
|||||||
|
|
||||||
const getTableData = () => {
|
const getTableData = () => {
|
||||||
// debugger
|
// debugger
|
||||||
|
console.log('当前是项目还是路径图 1 路径图 2 项目', props)
|
||||||
console.log('当前是项目还是路径图 1 路径图 2 项目', props.types)
|
console.log('当前是项目还是路径图 1 路径图 2 项目', props.types)
|
||||||
if ( props.datasource.type == 6 && props.types==1 || props.datasource.type == 9 && props.types==1) {
|
if ( props.datasource.type == 6 && props.types==1 || props.datasource.type == 9 && props.types==1) {
|
||||||
// 此处为获取评估学员的接口 - 如后续还有用到此接口的公共任务可直接在if里面加||判断即可
|
// 此处为获取评估学员的接口 - 如后续还有用到此接口的公共任务可直接在if里面加||判断即可
|
||||||
@@ -458,7 +459,7 @@ export default {
|
|||||||
taskType: props.datasource.type,
|
taskType: props.datasource.type,
|
||||||
status: state.projectName,
|
status: state.projectName,
|
||||||
studentName: state.name,
|
studentName: state.name,
|
||||||
signStatus: state.projectName2
|
signStatus: state.projectName2,
|
||||||
});
|
});
|
||||||
api
|
api
|
||||||
.AssessmentManagementMessage({
|
.AssessmentManagementMessage({
|
||||||
@@ -471,7 +472,7 @@ export default {
|
|||||||
taskType: props.datasource.type,
|
taskType: props.datasource.type,
|
||||||
status: state.projectName,
|
status: state.projectName,
|
||||||
studentName: state.name,
|
studentName: state.name,
|
||||||
signStatus: state.projectName2
|
signStatus: state.projectName2,
|
||||||
})
|
})
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
console.log(res);
|
console.log(res);
|
||||||
@@ -499,7 +500,7 @@ export default {
|
|||||||
currentStageId: props.datasource.stageId,
|
currentStageId: props.datasource.stageId,
|
||||||
type: 1,
|
type: 1,
|
||||||
pid: props.datasource.projectId,
|
pid: props.datasource.projectId,
|
||||||
taskId: props.datasource.projectTaskId,
|
taskId: props.datasource.id,
|
||||||
taskType: props.datasource.type,
|
taskType: props.datasource.type,
|
||||||
status: state.projectName,
|
status: state.projectName,
|
||||||
studentName: state.name,
|
studentName: state.name,
|
||||||
@@ -512,7 +513,7 @@ export default {
|
|||||||
currentStageId: props.datasource.stageId,
|
currentStageId: props.datasource.stageId,
|
||||||
type: 1, // 1项目 2 路径
|
type: 1, // 1项目 2 路径
|
||||||
pid: props.datasource.projectId,
|
pid: props.datasource.projectId,
|
||||||
taskId: props.datasource.projectTaskId,
|
taskId: props.datasource.id,
|
||||||
taskType: props.datasource.type,
|
taskType: props.datasource.type,
|
||||||
status: state.projectName,
|
status: state.projectName,
|
||||||
studentName: state.name,
|
studentName: state.name,
|
||||||
@@ -758,7 +759,7 @@ export default {
|
|||||||
courseId: Number(props.datasource.courseId),
|
courseId: Number(props.datasource.courseId),
|
||||||
routerId: Number(props.datasource.projectId),
|
routerId: Number(props.datasource.projectId),
|
||||||
ids: [value.record.studentId],
|
ids: [value.record.studentId],
|
||||||
taskId: Number(props.datasource.projectTaskId),
|
taskId: Number(props.datasource.id),
|
||||||
taskType: Number(props.datasource.type),
|
taskType: Number(props.datasource.type),
|
||||||
type: 2,
|
type: 2,
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -27,10 +27,15 @@
|
|||||||
<div class="fi_input">
|
<div class="fi_input">
|
||||||
<a-input
|
<a-input
|
||||||
v-model:value="params.keyWord"
|
v-model:value="params.keyWord"
|
||||||
style="width: 424px; height: 40px; border-radius: 8px"
|
style="width: 200px; height: 40px; border-radius: 8px;margin-right:24px;"
|
||||||
placeholder="请输入案例标题"
|
placeholder="请输入案例标题"
|
||||||
show-count
|
/>
|
||||||
:maxlength="20"
|
</div>
|
||||||
|
<div class="fi_input">
|
||||||
|
<a-input
|
||||||
|
v-model:value="params.authorName"
|
||||||
|
style="width: 200px; height: 40px; border-radius: 8px"
|
||||||
|
placeholder="请输入作者名字"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -99,6 +104,7 @@ const columns = ref([
|
|||||||
])
|
])
|
||||||
const initParams = {
|
const initParams = {
|
||||||
keyWord: '',
|
keyWord: '',
|
||||||
|
authorName: '',
|
||||||
pageIndex: 1,
|
pageIndex: 1,
|
||||||
pageSize: 10,
|
pageSize: 10,
|
||||||
orderAsc: true
|
orderAsc: true
|
||||||
@@ -148,8 +154,12 @@ const rowSelection = computed(() => ({
|
|||||||
selectedRowKeys: rowSelectKeys.value,
|
selectedRowKeys: rowSelectKeys.value,
|
||||||
onChange: onSelectChange,
|
onChange: onSelectChange,
|
||||||
preserveSelectedRowKeys: true,
|
preserveSelectedRowKeys: true,
|
||||||
|
getCheckboxProps: getCheckboxProps
|
||||||
}));
|
}));
|
||||||
|
const getCheckboxProps = () => ({
|
||||||
|
// 某几项默认禁止选中(R: 当state等于1时)
|
||||||
|
disabled: false
|
||||||
|
})
|
||||||
function onSelectChange(e, l) {
|
function onSelectChange(e, l) {
|
||||||
rowSelectKeys.value = e;
|
rowSelectKeys.value = e;
|
||||||
selectsData.value = l;
|
selectsData.value = l;
|
||||||
|
|||||||
@@ -18,43 +18,25 @@
|
|||||||
/>
|
/>
|
||||||
</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 v-if="taskIndex >= 0">
|
<div>
|
||||||
<button
|
|
||||||
v-if="isOuter==1"
|
|
||||||
style="width: 100px; cursor: pointer;"
|
|
||||||
@click="changeOuter(1)"
|
|
||||||
:class="isOuter == 1 ? 'outer' : 'notOuter'"
|
|
||||||
>
|
|
||||||
系统考试
|
|
||||||
</button>
|
|
||||||
<button
|
|
||||||
v-else
|
|
||||||
style="width: 100px; cursor: pointer;"
|
|
||||||
@click="changeOuter(2)"
|
|
||||||
:class="isOuter == 2 ? 'outer' : 'notOuter'"
|
|
||||||
>
|
|
||||||
外部考试
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div v-else>
|
|
||||||
<button
|
<button
|
||||||
style="width: 100px; cursor: pointer;"
|
style="width: 100px; cursor: pointer;"
|
||||||
@click="changeOuter(1)"
|
@click="changeOuter(1)"
|
||||||
:class="isOuter == 1 ? 'outer' : 'notOuter'"
|
:class="formData.examType === 1 ? 'outer' : 'notOuter'"
|
||||||
>
|
>
|
||||||
系统考试
|
系统考试
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button
|
||||||
style="width: 100px; cursor: pointer;"
|
style="width: 100px; cursor: pointer;"
|
||||||
@click="changeOuter(2)"
|
@click="changeOuter(2)"
|
||||||
:class="isOuter == 2 ? 'outer' : 'notOuter'"
|
:class="formData.examType === 2 ? 'outer' : 'notOuter'"
|
||||||
>
|
>
|
||||||
外部考试
|
外部考试
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div v-if="isOuter===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">
|
||||||
@@ -68,7 +50,6 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="btnbox">
|
<div class="btnbox">
|
||||||
<a-input
|
<a-input
|
||||||
:disabled="taskIndex >= 0"
|
|
||||||
v-model:value="formData.examinationName"
|
v-model:value="formData.examinationName"
|
||||||
style="width: 400px; height: 40px; border-radius: 8px"
|
style="width: 400px; height: 40px; border-radius: 8px"
|
||||||
placeholder="请输入考试名称"
|
placeholder="请输入考试名称"
|
||||||
@@ -89,13 +70,13 @@
|
|||||||
</div>
|
</div>
|
||||||
<s-test v-model:id="formData.examinationTestId" v-model:name="formData.examinationTestName">
|
<s-test v-model:id="formData.examinationTestId" v-model:name="formData.examinationTestName">
|
||||||
<div class="btnbox">
|
<div class="btnbox">
|
||||||
<button class="xkbtn" @click="selectTest" :disabled="taskIndex >= 0">
|
<button class="xkbtn" style="margin:0">
|
||||||
{{ formData.examinationTestId ? "重选" : "选择" }}试卷
|
{{ formData.examinationTestId ? "重选" : "选择" }}试卷
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</s-test>
|
</s-test>
|
||||||
<div v-if="formData.examinationTestId">
|
<div v-if="formData.examinationTestId">
|
||||||
<a-tag closable color="processing" @close="delTag" :closeIcon="taskIndex >= 0">
|
<a-tag closable color="processing" @close="delTag" :closeIcon="true">
|
||||||
<span style="font-size: 14px; line-height: 33px">{{ formData.examinationTestName }}</span>
|
<span style="font-size: 14px; line-height: 33px">{{ formData.examinationTestName }}</span>
|
||||||
</a-tag>
|
</a-tag>
|
||||||
</div>
|
</div>
|
||||||
@@ -116,8 +97,8 @@
|
|||||||
style="width: 400px; height: 40px; border-radius: 8px"
|
style="width: 400px; height: 40px; border-radius: 8px"
|
||||||
:show-time="{format:'hh:mm'}"
|
:show-time="{format:'hh:mm'}"
|
||||||
:disabled-date="disabledDate"
|
:disabled-date="disabledDate"
|
||||||
:disabled-time="disabledRangeTime"
|
format="YYYY-MM-DD HH:mm"
|
||||||
format="YYYY/MM/DD HH:mm"
|
valueFormat="YYYY-MM-DD HH:mm"
|
||||||
v-model:value="dateTime"
|
v-model:value="dateTime"
|
||||||
@change="timeChange"
|
@change="timeChange"
|
||||||
:placeholder="[' 开始时间', ' 结束时间']"
|
:placeholder="[' 开始时间', ' 结束时间']"
|
||||||
@@ -136,7 +117,6 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="select">
|
<div class="select">
|
||||||
<a-input-number
|
<a-input-number
|
||||||
:disabled="taskIndex >= 0"
|
|
||||||
:min="0"
|
:min="0"
|
||||||
:max="300"
|
:max="300"
|
||||||
:precision="0"
|
:precision="0"
|
||||||
@@ -158,7 +138,6 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="btnbox">
|
<div class="btnbox">
|
||||||
<a-input
|
<a-input
|
||||||
:disabled="taskIndex >= 0"
|
|
||||||
v-model:value="formData.passLine"
|
v-model:value="formData.passLine"
|
||||||
type="number"
|
type="number"
|
||||||
style="width: 400px; height: 40px; border-radius: 8px"
|
style="width: 400px; height: 40px; border-radius: 8px"
|
||||||
@@ -173,7 +152,6 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="textarea">
|
<div class="textarea">
|
||||||
<a-textarea
|
<a-textarea
|
||||||
:disabled="taskIndex >= 0"
|
|
||||||
v-model:value="formData.examinationExplain"
|
v-model:value="formData.examinationExplain"
|
||||||
placeholder="请输入考试说明"
|
placeholder="请输入考试说明"
|
||||||
allow-clear
|
allow-clear
|
||||||
@@ -192,7 +170,6 @@
|
|||||||
<div class="timerbox">
|
<div class="timerbox">
|
||||||
<span>允许重复考试:</span>
|
<span>允许重复考试:</span>
|
||||||
<a-input-number
|
<a-input-number
|
||||||
:disabled="taskIndex >= 0"
|
|
||||||
:min="-1"
|
:min="-1"
|
||||||
:max="300"
|
:max="300"
|
||||||
:precision="0"
|
:precision="0"
|
||||||
@@ -217,7 +194,6 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="btnbox">
|
<div class="btnbox">
|
||||||
<a-radio-group
|
<a-radio-group
|
||||||
:disabled="taskIndex >= 0"
|
|
||||||
style="margin-right: 12px"
|
style="margin-right: 12px"
|
||||||
v-model:value="formData.showAnswers"
|
v-model:value="formData.showAnswers"
|
||||||
>
|
>
|
||||||
@@ -232,7 +208,6 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="btnbox">
|
<div class="btnbox">
|
||||||
<a-radio-group
|
<a-radio-group
|
||||||
:disabled="taskIndex >= 0"
|
|
||||||
style="margin-right: 12px"
|
style="margin-right: 12px"
|
||||||
v-model:value="formData.showAnalysis"
|
v-model:value="formData.showAnalysis"
|
||||||
>
|
>
|
||||||
@@ -247,7 +222,6 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="btnbox">
|
<div class="btnbox">
|
||||||
<a-radio-group
|
<a-radio-group
|
||||||
:disabled="taskIndex >= 0"
|
|
||||||
style="margin-right: 12px"
|
style="margin-right: 12px"
|
||||||
v-model:value="formData.scoringModel"
|
v-model:value="formData.scoringModel"
|
||||||
>
|
>
|
||||||
@@ -264,7 +238,6 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="btnbox">
|
<div class="btnbox">
|
||||||
<a-radio-group
|
<a-radio-group
|
||||||
:disabled="taskIndex >= 0"
|
|
||||||
style="margin-right: 12px"
|
style="margin-right: 12px"
|
||||||
v-model:value="formData.questionArrangement"
|
v-model:value="formData.questionArrangement"
|
||||||
>
|
>
|
||||||
@@ -292,7 +265,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="btnbox">
|
<div class="btnbox">
|
||||||
<a-input
|
<a-input
|
||||||
v-model:value="formDataOuter.examinationName"
|
v-model:value="formData.examinationName"
|
||||||
style="width: 400px; height: 40px; border-radius: 8px"
|
style="width: 400px; height: 40px; border-radius: 8px"
|
||||||
placeholder="请输入考试名称"
|
placeholder="请输入考试名称"
|
||||||
:maxlength="20"
|
:maxlength="20"
|
||||||
@@ -311,7 +284,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="btnbox">
|
<div class="btnbox">
|
||||||
<a-input
|
<a-input
|
||||||
v-model:value="formDataOuter.source"
|
v-model:value="formData.source"
|
||||||
style="width: 400px; height: 40px; border-radius: 8px"
|
style="width: 400px; height: 40px; border-radius: 8px"
|
||||||
placeholder="请输入数据来源"
|
placeholder="请输入数据来源"
|
||||||
:maxlength="20"
|
:maxlength="20"
|
||||||
@@ -324,7 +297,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="textarea">
|
<div class="textarea">
|
||||||
<a-textarea
|
<a-textarea
|
||||||
v-model:value="formDataOuter.externalExplain"
|
v-model:value="formData.externalExplain"
|
||||||
placeholder="请输入考试说明"
|
placeholder="请输入考试说明"
|
||||||
allow-clear
|
allow-clear
|
||||||
show-count
|
show-count
|
||||||
@@ -337,75 +310,109 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="main_btns">
|
<div class="main_btns">
|
||||||
<a-button class="btn1" @click="closeDrawer">取消</a-button>
|
<a-button class="btn1" @click="closeDrawer">取消</a-button>
|
||||||
<a-button v-if="isOuter==1" class="btn2" @click="confirm">确定</a-button>
|
<a-button class="btn2" @click="confirm">确定</a-button>
|
||||||
<a-button v-else class="btn2" @click="confirmouter">确定</a-button>
|
|
||||||
</div>
|
</div>
|
||||||
<!-- 加载动画 -->
|
|
||||||
<div class="aeLoading" :style="{ display: addLoading ? 'flex' : 'none' }">
|
|
||||||
<a-spin :spinning="addLoading" tip=""/>
|
|
||||||
</div>
|
|
||||||
<!-- 选择考试抽屉 -->
|
|
||||||
<s-test v-model:STvisible="STvisible" @getSTData="getData"/>
|
|
||||||
</div>
|
</div>
|
||||||
</a-drawer>
|
</a-drawer>
|
||||||
</template>
|
</template>
|
||||||
<script setup>
|
<script setup>
|
||||||
import {defineEmits, defineProps, ref} from "vue";
|
import {defineEmits, defineProps, ref, watch} from "vue";
|
||||||
import STest from "./SelectTest.vue";
|
import STest from "./SelectTest.vue";
|
||||||
import dayjs from "dayjs";
|
import dayjs from "dayjs";
|
||||||
import {message} from "ant-design-vue";
|
import {Form, message} from "ant-design-vue";
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
type: Number,
|
type: Number,
|
||||||
taskList: []
|
taskList: []
|
||||||
})
|
})
|
||||||
const visible = ref(false)
|
const visible = ref(false)
|
||||||
const formData = ref({
|
const initValue = {
|
||||||
|
examinationName: '',
|
||||||
|
examinationTestId: '',
|
||||||
|
examinationStartTime: '',
|
||||||
|
examinationEndTime: '',
|
||||||
|
examinationDuration: '',
|
||||||
|
passLine: '',
|
||||||
examType: 1,
|
examType: 1,
|
||||||
|
source: "",
|
||||||
showAnswers: 2,
|
showAnswers: 2,
|
||||||
showAnalysis: 2,
|
showAnalysis: 2,
|
||||||
scoringModel: 2,
|
scoringModel: 2,
|
||||||
questionArrangement: 4
|
questionArrangement: 4,
|
||||||
})
|
|
||||||
|
|
||||||
const formDataOuter = ref({
|
|
||||||
examType: 2,
|
|
||||||
examinationName:"",
|
|
||||||
source:"",
|
|
||||||
externalExplain: ""
|
externalExplain: ""
|
||||||
})
|
}
|
||||||
|
const formData = ref(initValue)
|
||||||
|
const innerRule = {
|
||||||
|
examinationName: [
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: '请输入考试名称',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
examinationTestId: [
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: '请输入选择试卷',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
examinationStartTime: [
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: '请输入开始开始时间',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
examinationEndTime: [
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: '请输入开始结束时间',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
examinationDuration: [
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: '请输入考试时长',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
passLine: [
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: '请输入及格线',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
const outerRule = {
|
||||||
|
examinationName: [
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: '请输入考试名称',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
source: [
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: '请输入数据来源',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
const rulesRef = ref(innerRule);
|
||||||
|
|
||||||
const emit = defineEmits({})
|
const emit = defineEmits({})
|
||||||
const taskIndex = ref(-1);
|
const taskIndex = ref(-1);
|
||||||
const dateTime = ref([]);
|
const dateTime = ref([]);
|
||||||
const isOuter = ref(1);
|
|
||||||
|
const {resetFields, validate} = Form.useForm(formData, rulesRef);
|
||||||
|
|
||||||
|
watch(() => formData.value.examType, () => {
|
||||||
|
formData.value.examType === 1 ? rulesRef.value = innerRule : rulesRef.value = outerRule
|
||||||
|
})
|
||||||
|
|
||||||
const closeDrawer = () => {
|
const closeDrawer = () => {
|
||||||
visible.value = false
|
visible.value = false
|
||||||
taskIndex.value = -1
|
taskIndex.value = -1
|
||||||
formData.value = {
|
resetFields()
|
||||||
examType: 1,
|
|
||||||
showAnswers: 2,
|
|
||||||
showAnalysis: 2,
|
|
||||||
scoringModel: 2,
|
|
||||||
questionArrangement: 4
|
|
||||||
}
|
|
||||||
formDataOuter.value = ref({
|
|
||||||
examType: 2,
|
|
||||||
examinationName:"",
|
|
||||||
source:"",
|
|
||||||
externalExplain:""
|
|
||||||
})
|
|
||||||
dateTime.value = []
|
dateTime.value = []
|
||||||
};
|
};
|
||||||
|
|
||||||
// const range = (start, end) => {
|
|
||||||
// const result = [];
|
|
||||||
// for (let i = start; i < end; i++) {
|
|
||||||
// result.push(i);
|
|
||||||
// }
|
|
||||||
// return result;
|
|
||||||
// };
|
|
||||||
|
|
||||||
function timeChange(time, timeStr) {
|
function timeChange(time, timeStr) {
|
||||||
formData.value.examinationStartTime = timeStr[0]
|
formData.value.examinationStartTime = timeStr[0]
|
||||||
@@ -416,39 +423,13 @@ const disabledDate = (current) => {
|
|||||||
return current && current < dayjs().startOf('day');
|
return current && current < dayjs().startOf('day');
|
||||||
};
|
};
|
||||||
|
|
||||||
const disabledRangeTime = () => ({
|
|
||||||
// disabledHours: () => range(0, 24).splice(4, 20),
|
|
||||||
// disabledMinutes: () => range(30, 60),
|
|
||||||
// disabledSeconds: () => [55, 56],
|
|
||||||
});
|
|
||||||
|
|
||||||
// 系统考试
|
// 系统考试
|
||||||
function confirm() {
|
async function confirm() {
|
||||||
if (!formData.value.examinationName) {
|
await validate().catch(({errorFields}) => {
|
||||||
message.warning("请输入考试名称");
|
message.warning(errorFields[0].errors.join());
|
||||||
return
|
throw Error("数据校验不通过")
|
||||||
}
|
});
|
||||||
if (!formData.value.examinationTestId) {
|
|
||||||
message.warning("请输入选择试卷");
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if (!formData.value.examinationStartTime) {
|
|
||||||
message.warning("请输入开始结束时间");
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if (!formData.value.examinationEndTime) {
|
|
||||||
message.warning("请输入开始结束时间");
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if (!formData.value.examinationDuration) {
|
|
||||||
message.warning("请输入考试时长");
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if (!formData.value.passLine) {
|
|
||||||
message.warning("请输入及格线");
|
|
||||||
return
|
|
||||||
}
|
|
||||||
// debugger
|
|
||||||
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}})
|
||||||
@@ -456,44 +437,17 @@ function confirm() {
|
|||||||
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
|
||||||
data.examType = formData.value == 1 ? 1 : 2
|
|
||||||
}
|
}
|
||||||
emit('update:taskList', [...props.taskList])
|
emit('update:taskList', [...props.taskList])
|
||||||
closeDrawer()
|
closeDrawer()
|
||||||
}
|
}
|
||||||
|
|
||||||
// 外部考试
|
|
||||||
function confirmouter() {
|
|
||||||
if (!formDataOuter.value.examinationName) {
|
|
||||||
message.warning("请输入考试名称");
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if (!formDataOuter.value.source) {
|
|
||||||
message.warning("请输入数据来源");
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if (taskIndex.value === -1) {
|
|
||||||
const list = props.taskList
|
|
||||||
list.push({name: formDataOuter.value.examinationName,duration:dayjs(formData.value.examinationEndTime).diff(formData.value.examinationStartTime,'minutes'), type: props.type, info: {...formDataOuter.value}})
|
|
||||||
} else {
|
|
||||||
const data = props.taskList[taskIndex.value]
|
|
||||||
data.name = formDataOuter.value.examinationName
|
|
||||||
data.info = formDataOuter.value
|
|
||||||
data.examType = 2
|
|
||||||
data.duration = dayjs(formData.value.examinationEndTime).diff(formData.value.examinationStartTime,'minutes')
|
|
||||||
}
|
|
||||||
emit('update:taskList', [...props.taskList])
|
|
||||||
closeDrawer()
|
|
||||||
}
|
|
||||||
|
|
||||||
function openDrawer(i, row) {
|
function openDrawer(i, row) {
|
||||||
row && row.info.examType == 1 ? row && (formData.value = row.info) : row && (formDataOuter.value = row.info);
|
row && resetFields(row.info);
|
||||||
row ? isOuter.value = row.info.examType : isOuter.value = 1;
|
row && (dateTime.value = [row.info.examinationStartTime, row.info.examinationEndTime]);
|
||||||
row && row.info.examType == 1 && (dateTime.value = [dayjs(row.info.examinationStartTime, "YYYY-MM-DD HH:mm"), dayjs(row.info.examinationEndTime, "YYYY-MM-DD HH:mm")]);
|
|
||||||
(i >= 0) && (taskIndex.value = i);
|
(i >= 0) && (taskIndex.value = i);
|
||||||
visible.value = true
|
visible.value = true
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const delTag = () => {
|
const delTag = () => {
|
||||||
@@ -502,7 +456,7 @@ const delTag = () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function changeOuter(v) {
|
function changeOuter(v) {
|
||||||
isOuter.value = v;
|
formData.value.examType = v;
|
||||||
}
|
}
|
||||||
|
|
||||||
defineExpose({openDrawer})
|
defineExpose({openDrawer})
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="main_item">
|
<div class="main_item">
|
||||||
<button class="xkbtn" @click="goResearchmanage">新建评估</button>
|
<button class="xkbtn" style="margin:0" @click="goResearchmanage">新建评估</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="main_notice" style="display: none">
|
<div class="main_notice" style="display: none">
|
||||||
@@ -156,7 +156,12 @@ const rowSelection = computed(() => ({
|
|||||||
selectedRowKeys: rowSelectKeys.value,
|
selectedRowKeys: rowSelectKeys.value,
|
||||||
onChange: onSelectChange,
|
onChange: onSelectChange,
|
||||||
preserveSelectedRowKeys: true,
|
preserveSelectedRowKeys: true,
|
||||||
|
getCheckboxProps: getCheckboxProps
|
||||||
}));
|
}));
|
||||||
|
const getCheckboxProps = () => ({
|
||||||
|
// 某几项默认禁止选中(R: 当state等于1时)
|
||||||
|
disabled: false
|
||||||
|
})
|
||||||
|
|
||||||
function onSelectChange(e, l) {
|
function onSelectChange(e, l) {
|
||||||
rowSelectKeys.value = e;
|
rowSelectKeys.value = e;
|
||||||
|
|||||||
@@ -1,261 +1,89 @@
|
|||||||
<!-- 评估列表 -->
|
|
||||||
<template>
|
<template>
|
||||||
<a-drawer
|
<div @click="openDrawer">
|
||||||
:visible="assessmentVisible"
|
<slot></slot>
|
||||||
class="drawerStyle addinvistDrawer"
|
</div>
|
||||||
width="70%"
|
<a-drawer :visible="visible" class="drawerStyle addinvistDrawer" width="900px" title="添加评估" placement="right">
|
||||||
title="添加评估"
|
|
||||||
placement="right"
|
|
||||||
@after-visible-change="afterVisibleChange"
|
|
||||||
>
|
|
||||||
<div class="drawerMain">
|
<div class="drawerMain">
|
||||||
<div class="header">
|
<div class="header">
|
||||||
<div v-if="edit" class="headerTitle">编辑评估</div>
|
<div class="headerTitle">{{assessmentId?'编辑评估':'添加评估'}}</div>
|
||||||
<div v-else class="headerTitle">添加评估</div>
|
<img style="width: 29px; height: 29px; cursor: pointer" src="../../assets/images/basicinfo/close.png"
|
||||||
<img
|
@click="closeDrawer"/>
|
||||||
style="width: 29px; height: 29px; cursor: pointer"
|
|
||||||
src="../../assets/images/basicinfo/close.png"
|
|
||||||
@click="closeDrawer"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="contentMain">
|
<div class="contentMain">
|
||||||
|
<div class="main">
|
||||||
<div class="main_left">
|
<div class="main_left">
|
||||||
<div class="main_item">
|
<AssessmentAll v-model:id="formData.assessmentId" v-model:name="formData.assessmentName"/>
|
||||||
<div class="fi_input">
|
|
||||||
<a-input
|
|
||||||
v-model:value="inputV1"
|
|
||||||
style="width: 424px; height: 40px; border-radius: 8px;"
|
|
||||||
placeholder="请输入评估名称"
|
|
||||||
maxlength="20"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div class="btns" @click="getAllInvistText">
|
|
||||||
<div class="search"></div>
|
|
||||||
<div class="btnText">搜索</div>
|
|
||||||
</div>
|
|
||||||
<div class="btnsn" @click="resetInvist">
|
|
||||||
<div class="search"></div>
|
|
||||||
<div class="btnText">重置</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="main_table">
|
|
||||||
<a-table
|
|
||||||
style="border: 1px solid #f2f6fe"
|
|
||||||
:columns="tableDataFunc()"
|
|
||||||
:data-source="tableData"
|
|
||||||
:loading="tableDataTotal === -1 ? true : false"
|
|
||||||
expandRowByClick="true"
|
|
||||||
@expand="expandTable"
|
|
||||||
:pagination="false"
|
|
||||||
:row-selection="rowSelection"
|
|
||||||
filterMultiple:false
|
|
||||||
/>
|
|
||||||
<div class="tableBox" style="margin-top:85px;">
|
|
||||||
<div class="pa">
|
|
||||||
<a-pagination
|
|
||||||
:showSizeChanger="false"
|
|
||||||
showQuickJumper="true"
|
|
||||||
hideOnSinglePage="true"
|
|
||||||
:pageSize="pageSize"
|
|
||||||
:current="currentPage"
|
|
||||||
:total="tableDataTotal"
|
|
||||||
class="pagination"
|
|
||||||
@change="handelChangePage"
|
|
||||||
/>
|
|
||||||
</div></div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="main_btns">
|
<div class="main_btns">
|
||||||
<button class="btn1" @click="closeDrawer">取消</button>
|
<button class="btn1" @click="closeDrawer">取消</button>
|
||||||
<button class="btn2" @click="submitCheck">确定</button>
|
<button class="btn2" @click="confirm">确定</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</a-drawer>
|
</a-drawer>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script setup>
|
||||||
import { reactive, toRefs } from "vue";
|
import {defineEmits, defineProps, ref, watch} from "vue";
|
||||||
import * as api from "../../api/indexInvist.js";
|
import {Form, message} from "ant-design-vue";
|
||||||
import dayjs from "dayjs";
|
import AssessmentAll from "@/components/drawers/AssessmentAll.vue";
|
||||||
export default {
|
|
||||||
name: "AssessmentList",
|
const props = defineProps({
|
||||||
// components: {
|
assessmentId: String,
|
||||||
// },
|
assessmentName: String,
|
||||||
props: {
|
})
|
||||||
assessmentVisible: {
|
const visible = ref(false)
|
||||||
type: Boolean,
|
const formData = ref({
|
||||||
default: false,
|
assessmentId: '',
|
||||||
|
assessmentName: '',
|
||||||
|
})
|
||||||
|
const emit = defineEmits({})
|
||||||
|
const rulesRef = ref({
|
||||||
|
assessmentId: [
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: '请选择评估',
|
||||||
},
|
},
|
||||||
assessmentId: {
|
],
|
||||||
type: Number,
|
assessmentName: [
|
||||||
default: null,
|
{
|
||||||
|
required: true,
|
||||||
|
message: '请选择评估',
|
||||||
},
|
},
|
||||||
assessmentName: {
|
],
|
||||||
type: String,
|
|
||||||
default: null,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
setup(props, ctx) {
|
|
||||||
const state = reactive({
|
|
||||||
assessmentVisible: false,
|
|
||||||
assessment: null,
|
|
||||||
inputV1: "",
|
|
||||||
currentPage: 1,
|
|
||||||
pageSize: 10,
|
|
||||||
tableDataTotal: 0,
|
|
||||||
tableData: [],
|
|
||||||
selectedRowKeys: [],
|
|
||||||
assessmentName:null,
|
|
||||||
assessmentId:null,
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const {resetFields, validate} = Form.useForm(formData, rulesRef);
|
||||||
|
watch(props,()=>{
|
||||||
|
formData.value.assessmentId = props.assessmentId
|
||||||
|
formData.value.assessmentName = props.assessmentName
|
||||||
|
})
|
||||||
const closeDrawer = () => {
|
const closeDrawer = () => {
|
||||||
ctx.emit("update:assessmentVisible", false);
|
visible.value = false
|
||||||
|
resetFields()
|
||||||
};
|
};
|
||||||
const afterVisibleChange = (bool) => {
|
|
||||||
console.log("state getAllInvistText", bool);
|
|
||||||
if (props.assessmentVisible) {
|
|
||||||
getAllInvistText();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
const tableDataFunc = () => {
|
|
||||||
const columns = [
|
|
||||||
{
|
|
||||||
title: "名称",
|
|
||||||
dataIndex: "name",
|
|
||||||
// width: "30%",
|
|
||||||
key: "name",
|
|
||||||
width: "40%",
|
|
||||||
className: "classify",
|
|
||||||
ellipsis: true,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: "题数",
|
|
||||||
dataIndex: "num",
|
|
||||||
key: "num",
|
|
||||||
width: "20%",
|
|
||||||
align: "center",
|
|
||||||
ellipsis: true,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: "创建人",
|
|
||||||
dataIndex: "creator",
|
|
||||||
key: "creator",
|
|
||||||
width: "20%",
|
|
||||||
align: "center",
|
|
||||||
ellipsis: true,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: "创建时间",
|
|
||||||
dataIndex: "time",
|
|
||||||
key: "time",
|
|
||||||
width: "20%",
|
|
||||||
align: "center",
|
|
||||||
ellipsis: true,
|
|
||||||
},
|
|
||||||
];
|
|
||||||
return columns;
|
|
||||||
};
|
|
||||||
const rowSelection = {
|
|
||||||
type: "radio",
|
|
||||||
onSelect: (selectedRows) => {
|
|
||||||
state.assessment = selectedRows;
|
|
||||||
console.log("selectedRows=======", state.assessment);
|
|
||||||
ctx.emit("checkedAss", state.assessment);
|
|
||||||
state.selectedRowKeys = [];
|
|
||||||
|
|
||||||
},
|
async function confirm() {
|
||||||
};
|
await validate().catch(({errorFields}) => {
|
||||||
const submitCheck=()=>{
|
message.warning(errorFields[0].errors.join());
|
||||||
ctx.emit("update:assessmentId", state.assessment.assessmentId);
|
throw Error("数据校验不通过")
|
||||||
ctx.emit("update:assessmentName", state.assessment.name);
|
|
||||||
closeDrawer();
|
|
||||||
}
|
|
||||||
|
|
||||||
const handelChangePage = (page, pageSize) => {
|
|
||||||
state.currentPage = page;
|
|
||||||
state.pageSize = pageSize;
|
|
||||||
getAllInvistText();
|
|
||||||
};
|
|
||||||
const getTableDate = (tableData) => {
|
|
||||||
let data = tableData;
|
|
||||||
let array = [];
|
|
||||||
data.map((value, index) => {
|
|
||||||
let n1 = value.essayQuestionVoList
|
|
||||||
? Number(value.essayQuestionVoList.length)
|
|
||||||
: 0 ;
|
|
||||||
let n2 = value.multipleStemVoList
|
|
||||||
? Number(value.multipleStemVoList.length)
|
|
||||||
: 0;
|
|
||||||
|
|
||||||
let n3 = value.scoringQuestionVoList
|
|
||||||
? Number(value.scoringQuestionVoList.length)
|
|
||||||
: 0;
|
|
||||||
let n4 = value.singleStemVoList
|
|
||||||
? Number(value.singleStemVoList.length)
|
|
||||||
: 0;
|
|
||||||
|
|
||||||
let num = n1 + n2 + n3 +n4;
|
|
||||||
let obj = {
|
|
||||||
key: index,
|
|
||||||
assessmentId: value.assessmentId,
|
|
||||||
num: num,
|
|
||||||
name: value.assessmentName ? value.assessmentName : "-",
|
|
||||||
creator: value.createUserName ? value.createUserName : "-",
|
|
||||||
time: dayjs(value.createTime).format("YYYY-MM-DD HH:mm"),
|
|
||||||
};
|
|
||||||
array.push(obj);
|
|
||||||
});
|
});
|
||||||
(state.selectedRowKeys = []), (state.tableData = array);
|
emit('update:assessmentId', formData.value.assessmentId)
|
||||||
};
|
emit('update:assessmentName', formData.value.assessmentName)
|
||||||
//获取全部评估信息接口
|
closeDrawer()
|
||||||
const getAllInvistText = () => {
|
|
||||||
api
|
|
||||||
.queryAssessmentDetailList({
|
|
||||||
assessmentName: state.inputV1,
|
|
||||||
pageNo: state.currentPage,
|
|
||||||
pageSize: state.pageSize,
|
|
||||||
releaseStatus: 2 ,
|
|
||||||
searchEndTime:"",
|
|
||||||
})
|
|
||||||
.then((res) => {
|
|
||||||
let arr = res.data.data.rows;
|
|
||||||
if (res.status === 200) {
|
|
||||||
// console.log("获取全部评估信息", res.data.data);
|
|
||||||
getTableDate(arr);
|
|
||||||
state.tableDataTotal = Number(res.data.data.total);
|
|
||||||
}
|
}
|
||||||
})
|
|
||||||
.catch((err) => {
|
|
||||||
console.log("获取全部评估信息接口失败", err);
|
|
||||||
// state.createLoading = false;
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
//重置评估信息
|
function openDrawer() {
|
||||||
const resetInvist = () => {
|
visible.value = true
|
||||||
state.inputV1 = "";
|
}
|
||||||
getAllInvistText();
|
|
||||||
};
|
defineExpose({openDrawer})
|
||||||
return {
|
|
||||||
...toRefs(state),
|
|
||||||
afterVisibleChange,
|
|
||||||
closeDrawer,
|
|
||||||
tableDataFunc,
|
|
||||||
rowSelection,
|
|
||||||
getAllInvistText,
|
|
||||||
resetInvist,
|
|
||||||
handelChangePage,
|
|
||||||
submitCheck,
|
|
||||||
};
|
|
||||||
},
|
|
||||||
};
|
|
||||||
</script>
|
</script>
|
||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
.ant-table-striped :deep(.table-striped) td {
|
.ant-table-striped :deep(.table-striped) td {
|
||||||
background-color: #fafafa !important;
|
background-color: #fafafa !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.addinvistDrawer {
|
.addinvistDrawer {
|
||||||
.drawerMain {
|
.drawerMain {
|
||||||
.header {
|
.header {
|
||||||
@@ -264,6 +92,7 @@ export default {
|
|||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
|
||||||
.headerTitle {
|
.headerTitle {
|
||||||
font-size: 18px;
|
font-size: 18px;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
@@ -272,18 +101,23 @@ export default {
|
|||||||
margin-left: 24px;
|
margin-left: 24px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.contentMain {
|
.contentMain {
|
||||||
|
.main {
|
||||||
|
width: 100%;
|
||||||
|
|
||||||
.main_left {
|
.main_left {
|
||||||
padding-right: 30px;
|
padding-right: 30px;
|
||||||
margin-top: 32px;
|
margin-top: 32px;
|
||||||
|
|
||||||
.main_item {
|
.main_item {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
margin-bottom: 32px;
|
|
||||||
.fi_input {
|
.fi_input {
|
||||||
margin-right: 20px;
|
margin-right: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.btns {
|
.btns {
|
||||||
margin-right: 20px;
|
margin-right: 20px;
|
||||||
padding: 0px 26px 0px 26px;
|
padding: 0px 26px 0px 26px;
|
||||||
@@ -297,12 +131,14 @@ export default {
|
|||||||
margin-right: 14px;
|
margin-right: 14px;
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
|
||||||
.search {
|
.search {
|
||||||
width: 15px;
|
width: 15px;
|
||||||
height: 17px;
|
height: 17px;
|
||||||
background-image: url("../../assets/images/courseManage/search0.png");
|
background-image: url("../../assets/images/courseManage/search0.png");
|
||||||
background-size: 100% 100%;
|
background-size: 100% 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.btnText {
|
.btnText {
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
@@ -311,6 +147,7 @@ export default {
|
|||||||
margin-left: 5px;
|
margin-left: 5px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.btnsn {
|
.btnsn {
|
||||||
padding: 0px 26px 0px 26px;
|
padding: 0px 26px 0px 26px;
|
||||||
height: 38px;
|
height: 38px;
|
||||||
@@ -323,12 +160,14 @@ export default {
|
|||||||
margin-right: 14px;
|
margin-right: 14px;
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
|
||||||
.search {
|
.search {
|
||||||
width: 16px;
|
width: 16px;
|
||||||
height: 18px;
|
height: 18px;
|
||||||
background-image: url("../../assets/images/courseManage/reset1.png");
|
background-image: url("../../assets/images/courseManage/reset1.png");
|
||||||
background-size: 100% 100%;
|
background-size: 100% 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.btnText {
|
.btnText {
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
@@ -338,56 +177,57 @@ export default {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.main_item2 {
|
|
||||||
.pa {
|
.main_notice {
|
||||||
width: 100%;
|
|
||||||
margin: 15px auto;
|
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: space-between;
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.main_table {
|
|
||||||
position: relative;
|
|
||||||
padding-bottom: 80px;
|
|
||||||
.ant-checkbox-wrapper {
|
|
||||||
align-items: center;
|
align-items: center;
|
||||||
margin-top: -2px;
|
margin-bottom: 3px;
|
||||||
}
|
height: 40px;
|
||||||
.ant-table-selection-column {
|
background-color: #e9f6fe;
|
||||||
padding: 0px !important;
|
|
||||||
padding-left: 5px !important;
|
.mntc_left {
|
||||||
}
|
|
||||||
.ant-table-thead > tr > th {
|
|
||||||
background-color: rgba(239, 244, 252, 1);
|
|
||||||
}
|
|
||||||
th.h {
|
|
||||||
background-color: #eff4fc !important;
|
|
||||||
}
|
|
||||||
.ant-table-tbody
|
|
||||||
> tr:hover:not(.ant-table-expanded-row):not(.ant-table-row-selected)
|
|
||||||
> td {
|
|
||||||
background: #f6f9fd;
|
|
||||||
}
|
|
||||||
.pa {
|
|
||||||
left: 0;
|
|
||||||
width: 100%;
|
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
align-items: center;
|
||||||
position: absolute;
|
|
||||||
bottom: 20px;
|
.title {
|
||||||
|
color: rgba(0, 0, 0, 0.65);
|
||||||
|
margin-right: 17px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.data {
|
||||||
|
color: #4ea6ff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notice_icon {
|
||||||
|
width: 14px;
|
||||||
|
height: 14px;
|
||||||
|
margin-right: 9px;
|
||||||
|
margin-left: 9px;
|
||||||
|
background-image: url(@/assets/images/coursewareManage/gan.png);
|
||||||
|
background-size: 100% 100%;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.mntc_right {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.main_btns {
|
.main_btns {
|
||||||
height: 72px;
|
height: 72px;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.16);
|
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.16);
|
||||||
|
|
||||||
.btn1 {
|
.btn1 {
|
||||||
width: 100px;
|
width: 100px;
|
||||||
height: 40px;
|
height: 40px;
|
||||||
@@ -397,6 +237,7 @@ export default {
|
|||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
.btn2 {
|
.btn2 {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
width: 100px;
|
width: 100px;
|
||||||
|
|||||||
@@ -22,8 +22,8 @@
|
|||||||
<img src="../../assets/images/studentimg/character.png" />
|
<img src="../../assets/images/studentimg/character.png" />
|
||||||
</div>
|
</div>
|
||||||
<div class="stumation">
|
<div class="stumation">
|
||||||
<div class="stuname">{{pro.routerInfo.userName}}</div>
|
<div class="stuname">{{pro.routerInfo.name}}</div>
|
||||||
<div class="stugangw">{{pro.routerInfo.deptName?pro.routerInfo.deptName:"" + '-' + pro.routerInfo.jobName?pro.routerInfo.jobName:""}}</div>
|
<div class="stugangw">{{pro.routerInfo.organizationName?pro.routerInfo.organizationName:"" + '-' + pro.routerInfo.jobName?pro.routerInfo.jobName:""}}</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="sortbox">
|
<div class="sortbox">
|
||||||
<div class="sortname">进度排名</div>
|
<div class="sortname">进度排名</div>
|
||||||
@@ -57,7 +57,7 @@
|
|||||||
<div class="sortbox" style="margin-left: 34px">
|
<div class="sortbox" style="margin-left: 34px">
|
||||||
<div class="sortname">已修证书</div>
|
<div class="sortname">已修证书</div>
|
||||||
<div class="sortnub">
|
<div class="sortnub">
|
||||||
<span class="nub1">{{pro.certCnt?pro.certCnt:0}}</span>
|
<span class="nub1">{{pro.routerInfo.certCnt?pro.routerInfo.certCnt:0}}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
392
src/components/drawers/CommonHomework.vue
Normal file
392
src/components/drawers/CommonHomework.vue
Normal file
@@ -0,0 +1,392 @@
|
|||||||
|
<template>
|
||||||
|
<div @click="openDrawer">
|
||||||
|
<slot></slot>
|
||||||
|
</div>
|
||||||
|
<a-drawer :visible="visible" class="drawerStyle addhomeworkDrawer" width="800" placement="right">
|
||||||
|
<div class="drawerMain">
|
||||||
|
<div class="header">
|
||||||
|
<div class="headerTitle">{{ info.workName ? "编辑" : "添加" }}任务</div>
|
||||||
|
<img style="width: 29px; height: 29px; cursor: pointer" src="../../assets/images/basicinfo/close.png"
|
||||||
|
@click="closeDrawer"/>
|
||||||
|
</div>
|
||||||
|
<div class="contentMain">
|
||||||
|
<div class="main_left">
|
||||||
|
<div class="main_item">
|
||||||
|
<div class="signbox">
|
||||||
|
<div class="sign">
|
||||||
|
<img
|
||||||
|
src="@/assets/images/coursewareManage/asterisk.png"
|
||||||
|
alt=""
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<span style="margin-right: 3px">作业名称:</span>
|
||||||
|
</div>
|
||||||
|
<div class="btnbox">
|
||||||
|
<a-input v-model:value="formData.workName" style="width: 400px; height: 40px; border-radius: 8px"
|
||||||
|
placeholder="请输入作业名称" autocomplete="off" show-count :maxlength="20"/>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="main_item">
|
||||||
|
<div class="signbox">
|
||||||
|
<div class="sign">
|
||||||
|
<img
|
||||||
|
src="@/assets/images/coursewareManage/asterisk.png"
|
||||||
|
alt=""
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<span style="margin-right: 3px">开始时间:</span>
|
||||||
|
</div>
|
||||||
|
<div class="btnbox">
|
||||||
|
<a-range-picker
|
||||||
|
style="width: 400px; height: 40px; border-radius: 8px"
|
||||||
|
:show-time="{ format: 'hh:mm' }"
|
||||||
|
:disabled-date="disabledDate"
|
||||||
|
v-model:value="dateTime"
|
||||||
|
format="YYYY-MM-DD HH:mm"
|
||||||
|
valueFormat="YYYY/MM/DD HH:mm"
|
||||||
|
@change="timeChange"
|
||||||
|
:placeholder="[' 开始时间', ' 结束时间']"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="main_item2">
|
||||||
|
<div class="signbox">
|
||||||
|
<div class="sign">
|
||||||
|
<img
|
||||||
|
src="@/assets/images/coursewareManage/asterisk.png"
|
||||||
|
alt=""
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<span style="margin-right: 3px">作业要求:</span>
|
||||||
|
</div>
|
||||||
|
<div class="textarea">
|
||||||
|
<a-textarea v-model:value="formData.workRequirement" placeholder="请输入作业要求" autocomplete="off"
|
||||||
|
allow-clear :rows="6" show-count :maxlength="200"/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="mbl_items">
|
||||||
|
<div class="item_nam">
|
||||||
|
<span style="margin-right: 10px"></span>
|
||||||
|
</div>
|
||||||
|
<div class="item_inp">
|
||||||
|
<FJUpload v-model:value="formData.workEnclosureAddress"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div style="width:100%;height: 80px;"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="main_btns" style="background:#fff;">
|
||||||
|
<a-button class="btn1" @click="closeDrawer">取消</a-button>
|
||||||
|
<a-button class="btn2" html-type="submit" @click="confirm">确定</a-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</a-drawer>
|
||||||
|
</template>
|
||||||
|
<script setup>
|
||||||
|
import {defineEmits, defineProps, ref, watch} from "vue";
|
||||||
|
import dayjs from "dayjs";
|
||||||
|
import FJUpload from "@/components/common/FJUpload";
|
||||||
|
import {Form, message} from "ant-design-vue";
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
info: {}
|
||||||
|
})
|
||||||
|
const visible = ref(false)
|
||||||
|
const initValue = {
|
||||||
|
workName: '',
|
||||||
|
submitStartTime: '',
|
||||||
|
submitEndTime: '',
|
||||||
|
workRequirement: '',
|
||||||
|
workEnclosureAddress: '',
|
||||||
|
}
|
||||||
|
const formData = ref(initValue)
|
||||||
|
const emit = defineEmits({})
|
||||||
|
const dateTime = ref([]);
|
||||||
|
|
||||||
|
const rulesRef = ref({
|
||||||
|
workName: [
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: '请输入作业名称',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
submitStartTime: [
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: '请输入开始时间',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
submitEndTime: [
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: '请输入结束时间',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
workRequirement: [
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: '请输入作业要求',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
});
|
||||||
|
const {resetFields, validate} = Form.useForm(formData, rulesRef);
|
||||||
|
|
||||||
|
watch([props, visible], () => {
|
||||||
|
resetFields(props.info)
|
||||||
|
dateTime.value = [props.info?.submitStartTime || '', props.info?.submitEndTime || '']
|
||||||
|
})
|
||||||
|
|
||||||
|
const closeDrawer = () => {
|
||||||
|
visible.value = false
|
||||||
|
resetFields()
|
||||||
|
dateTime.value = []
|
||||||
|
};
|
||||||
|
|
||||||
|
function timeChange(time, timeStr) {
|
||||||
|
formData.value.submitStartTime = timeStr[0]
|
||||||
|
formData.value.submitEndTime = timeStr[1]
|
||||||
|
}
|
||||||
|
|
||||||
|
const disabledDate = (current) => {
|
||||||
|
return current && current < dayjs().startOf('day');
|
||||||
|
};
|
||||||
|
|
||||||
|
async function confirm() {
|
||||||
|
await validate().catch(({errorFields}) => {
|
||||||
|
message.warning(errorFields[0].errors.join());
|
||||||
|
throw Error("数据校验不通过")
|
||||||
|
});
|
||||||
|
emit('update:info', {...formData.value})
|
||||||
|
closeDrawer()
|
||||||
|
}
|
||||||
|
|
||||||
|
function openDrawer() {
|
||||||
|
visible.value = true
|
||||||
|
}
|
||||||
|
|
||||||
|
defineExpose({openDrawer})
|
||||||
|
</script>
|
||||||
|
<style lang="scss">
|
||||||
|
.ant-table-striped :deep(.table-striped) td {
|
||||||
|
background-color: #fafafa !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.addhomeworkDrawer {
|
||||||
|
.drawerMain {
|
||||||
|
.header {
|
||||||
|
height: 73px;
|
||||||
|
border-bottom: 1px solid #e8e8e8;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
flex-shrink: 0;
|
||||||
|
|
||||||
|
.headerTitle {
|
||||||
|
font-size: 18px;
|
||||||
|
font-weight: 600;
|
||||||
|
color: #333333;
|
||||||
|
line-height: 25px;
|
||||||
|
margin-left: 24px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.contentMain {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
|
||||||
|
.main_left {
|
||||||
|
padding-right: 30px;
|
||||||
|
flex: 1;
|
||||||
|
border-right: 1px solid #e8e8e8;
|
||||||
|
margin-top: 32px;
|
||||||
|
|
||||||
|
.main_item {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
margin-top: 32px;
|
||||||
|
margin-bottom: 32px;
|
||||||
|
|
||||||
|
.signbox {
|
||||||
|
width: 120px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: end;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
.sign {
|
||||||
|
margin-right: 5px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.btnbox {
|
||||||
|
display: flex;
|
||||||
|
flex: 1;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
.xkbtn {
|
||||||
|
cursor: pointer;
|
||||||
|
width: 130px;
|
||||||
|
height: 40px;
|
||||||
|
background: #4ea6ff;
|
||||||
|
border-radius: 8px;
|
||||||
|
border: 0;
|
||||||
|
margin-right: 8px;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.mbl_items {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: flex-end;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
|
||||||
|
.item_nam {
|
||||||
|
width: 100px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: flex-end;
|
||||||
|
white-space: nowrap;
|
||||||
|
|
||||||
|
.asterisk_icon {
|
||||||
|
width: 10px;
|
||||||
|
height: 10px;
|
||||||
|
margin-right: 5px;
|
||||||
|
margin-top: -15px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.item_inp {
|
||||||
|
flex: 1;
|
||||||
|
position: relative;
|
||||||
|
margin-left: -25px;
|
||||||
|
|
||||||
|
.inp_num {
|
||||||
|
position: absolute;
|
||||||
|
left: 398px;
|
||||||
|
top: 10px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.main_item2 {
|
||||||
|
display: flex;
|
||||||
|
align-items: flex-start;
|
||||||
|
margin-bottom: 32px;
|
||||||
|
|
||||||
|
.textarea {
|
||||||
|
width: 373px;
|
||||||
|
|
||||||
|
.ant-input {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ant-input-textarea-show-count {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ant-input-textarea-show-count::after {
|
||||||
|
position: absolute;
|
||||||
|
right: 10px;
|
||||||
|
bottom: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ant-input {
|
||||||
|
border-radius: 8px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.signbox {
|
||||||
|
width: 120px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: end;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
.sign {
|
||||||
|
margin-right: 5px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.kqszbox {
|
||||||
|
.qdqtbox {
|
||||||
|
margin-left: 56px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.setbox {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
margin-top: 10px;
|
||||||
|
margin-bottom: 24px;
|
||||||
|
|
||||||
|
.timerbox {
|
||||||
|
margin-top: 6px;
|
||||||
|
margin-right: 32px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
flex-wrap: nowrap;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.btnbox2 {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: flex-start;
|
||||||
|
|
||||||
|
.xkbtn {
|
||||||
|
cursor: pointer;
|
||||||
|
width: 130px;
|
||||||
|
height: 40px;
|
||||||
|
background: #4ea6ff;
|
||||||
|
border-radius: 8px;
|
||||||
|
border: 0;
|
||||||
|
margin-right: 16px 8px 32px 0;
|
||||||
|
color: #fff;
|
||||||
|
margin-top: 16px;
|
||||||
|
margin-bottom: 60px;
|
||||||
|
margin-left: 124px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.main_btns {
|
||||||
|
position: absolute;
|
||||||
|
height: 72px;
|
||||||
|
width: 100%;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.16);
|
||||||
|
|
||||||
|
.btn1 {
|
||||||
|
width: 100px;
|
||||||
|
height: 40px;
|
||||||
|
border: 1px solid #4ea6ff;
|
||||||
|
border-radius: 8px;
|
||||||
|
color: #4ea6ff;
|
||||||
|
background-color: #fff;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn2 {
|
||||||
|
cursor: pointer;
|
||||||
|
width: 100px;
|
||||||
|
height: 40px;
|
||||||
|
background: #4ea6ff;
|
||||||
|
border-radius: 8px;
|
||||||
|
border: 0;
|
||||||
|
margin-left: 15px;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
695
src/components/drawers/CommonTest.vue
Normal file
695
src/components/drawers/CommonTest.vue
Normal file
@@ -0,0 +1,695 @@
|
|||||||
|
<template>
|
||||||
|
<div @click="openDrawer">
|
||||||
|
<slot></slot>
|
||||||
|
</div>
|
||||||
|
<a-drawer
|
||||||
|
:visible="visible"
|
||||||
|
class="drawerStyle addtestDrawer"
|
||||||
|
width="800"
|
||||||
|
placement="right"
|
||||||
|
>
|
||||||
|
<div class="drawerMain">
|
||||||
|
<div class="header">
|
||||||
|
<div class="headerTitle">{{ info.examinationName >= 0 ? "编辑" : "添加" }}考试</div>
|
||||||
|
<img
|
||||||
|
style="width: 29px; height: 29px; cursor: pointer"
|
||||||
|
src="../../assets/images/basicinfo/close.png"
|
||||||
|
@click="closeDrawer"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div style="display: flex; flex-direction: row; padding-top: 0px; margin-top: 20px; margin-left: 32px;">
|
||||||
|
<div>
|
||||||
|
<button
|
||||||
|
style="width: 100px; cursor: pointer;"
|
||||||
|
@click="changeOuter(1)"
|
||||||
|
:class="formData.examType === 1 ? 'outer' : 'notOuter'"
|
||||||
|
>
|
||||||
|
系统考试
|
||||||
|
</button>
|
||||||
|
<button
|
||||||
|
style="width: 100px; cursor: pointer;"
|
||||||
|
@click="changeOuter(2)"
|
||||||
|
:class="formData.examType === 2 ? 'outer' : 'notOuter'"
|
||||||
|
>
|
||||||
|
外部考试
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div v-if="formData.examType===1" class="contentMain">
|
||||||
|
<div class="main_left">
|
||||||
|
<div class="main_item">
|
||||||
|
<div class="signbox">
|
||||||
|
<div class="sign">
|
||||||
|
<img
|
||||||
|
src="@/assets/images/coursewareManage/asterisk.png"
|
||||||
|
alt=""
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<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"
|
||||||
|
placeholder="请输入考试名称"
|
||||||
|
:maxlength="20"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="main_item">
|
||||||
|
<div class="signbox">
|
||||||
|
<div class="sign">
|
||||||
|
<img
|
||||||
|
src="@/assets/images/coursewareManage/asterisk.png"
|
||||||
|
alt=""
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<span style="margin-right: 3px">选择试卷:</span>
|
||||||
|
</div>
|
||||||
|
<s-test v-model:id="formData.examinationTestId" v-model:name="formData.examinationTestName">
|
||||||
|
<div class="btnbox">
|
||||||
|
<button class="xkbtn" style="margin:0">
|
||||||
|
{{ formData.examinationTestId ? "重选" : "选择" }}试卷
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</s-test>
|
||||||
|
<div v-if="formData.examinationTestId">
|
||||||
|
<a-tag closable color="processing" @close="delTag" :closeIcon="true">
|
||||||
|
<span style="font-size: 14px; line-height: 33px">{{ formData.examinationTestName }}</span>
|
||||||
|
</a-tag>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="main_item">
|
||||||
|
<div class="signbox">
|
||||||
|
<div class="sign">
|
||||||
|
<img
|
||||||
|
src="@/assets/images/coursewareManage/asterisk.png"
|
||||||
|
alt=""
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<span style="margin-right: 3px">考试时间:</span>
|
||||||
|
</div>
|
||||||
|
<div class="btnbox">
|
||||||
|
<a-range-picker
|
||||||
|
style="width: 400px; height: 40px; border-radius: 8px"
|
||||||
|
:show-time="{format:'hh:mm'}"
|
||||||
|
: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 class="main_item">
|
||||||
|
<div class="signbox">
|
||||||
|
<div class="sign">
|
||||||
|
<img
|
||||||
|
src="@/assets/images/coursewareManage/asterisk.png"
|
||||||
|
alt=""
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<span style="margin-right: 3px">考试时长:</span>
|
||||||
|
</div>
|
||||||
|
<div class="select">
|
||||||
|
<a-input-number
|
||||||
|
: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>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="main_item">
|
||||||
|
<div class="signbox">
|
||||||
|
<div class="sign">
|
||||||
|
<img
|
||||||
|
src="@/assets/images/coursewareManage/asterisk.png"
|
||||||
|
alt=""
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<span style="margin-right: 3px">及格线:</span>
|
||||||
|
</div>
|
||||||
|
<div class="btnbox">
|
||||||
|
<a-input
|
||||||
|
v-model:value="formData.passLine"
|
||||||
|
type="number"
|
||||||
|
style="width: 400px; height: 40px; border-radius: 8px"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<span style="color: #999999; margin-left: 8px">分</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="main_item2">
|
||||||
|
<div class="signbox">
|
||||||
|
<span style="margin-right: 3px">考试说明:</span>
|
||||||
|
</div>
|
||||||
|
<div class="textarea">
|
||||||
|
<a-textarea
|
||||||
|
v-model:value="formData.examinationExplain"
|
||||||
|
placeholder="请输入考试说明"
|
||||||
|
allow-clear
|
||||||
|
show-count
|
||||||
|
:maxlength="200"
|
||||||
|
:rows="6"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="main_item2">
|
||||||
|
<div class="signbox">
|
||||||
|
<span style="margin-right: 3px;margin-top: 10px;">考试限制:</span>
|
||||||
|
</div>
|
||||||
|
<div class="kqszbox">
|
||||||
|
<div class="setbox">
|
||||||
|
<div class="timerbox">
|
||||||
|
<span>允许重复考试:</span>
|
||||||
|
<a-input-number
|
||||||
|
:min="-1"
|
||||||
|
:max="300"
|
||||||
|
:precision="0"
|
||||||
|
style="
|
||||||
|
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 class="main_item">
|
||||||
|
<div class="signbox">
|
||||||
|
<span style="margin-right: 3px">显示答案:</span>
|
||||||
|
</div>
|
||||||
|
<div class="btnbox">
|
||||||
|
<a-radio-group
|
||||||
|
style="margin-right: 12px"
|
||||||
|
v-model:value="formData.showAnswers"
|
||||||
|
>
|
||||||
|
<a-radio :value="1">允许查看</a-radio>
|
||||||
|
<a-radio :value="2">不允许查看</a-radio>
|
||||||
|
</a-radio-group>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="main_item">
|
||||||
|
<div class="signbox">
|
||||||
|
<span style="margin-right: 3px">显示解析:</span>
|
||||||
|
</div>
|
||||||
|
<div class="btnbox">
|
||||||
|
<a-radio-group
|
||||||
|
style="margin-right: 12px"
|
||||||
|
v-model:value="formData.showAnalysis"
|
||||||
|
>
|
||||||
|
<a-radio :value="1">允许查看</a-radio>
|
||||||
|
<a-radio :value="2">不允许查看</a-radio>
|
||||||
|
</a-radio-group>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="main_item">
|
||||||
|
<div class="signbox">
|
||||||
|
<span style="margin-right: 3px">评分模式:</span>
|
||||||
|
</div>
|
||||||
|
<div class="btnbox">
|
||||||
|
<a-radio-group
|
||||||
|
style="margin-right: 12px"
|
||||||
|
v-model:value="formData.scoringModel"
|
||||||
|
>
|
||||||
|
<a-radio :value="1">最高一次</a-radio>
|
||||||
|
<a-radio :value="2">最后一次</a-radio>
|
||||||
|
</a-radio-group>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="main_item">
|
||||||
|
<div class="signbox">
|
||||||
|
<span style="margin-right: 3px">试题排列:</span>
|
||||||
|
</div>
|
||||||
|
<div class="btnbox">
|
||||||
|
<a-radio-group
|
||||||
|
style="margin-right: 12px"
|
||||||
|
v-model:value="formData.questionArrangement"
|
||||||
|
>
|
||||||
|
<a-radio :value="1">试题乱序</a-radio>
|
||||||
|
<a-radio :value="2">选项乱序</a-radio>
|
||||||
|
<a-radio :value="3">全部乱序</a-radio>
|
||||||
|
<a-radio :value="4">不乱序</a-radio>
|
||||||
|
</a-radio-group>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="main_item" style="height: 20px;"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div v-else class="contentMain">
|
||||||
|
<div class="main_left">
|
||||||
|
<div class="main_item">
|
||||||
|
<div class="signbox">
|
||||||
|
<div class="sign">
|
||||||
|
<img
|
||||||
|
src="@/assets/images/coursewareManage/asterisk.png"
|
||||||
|
alt=""
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<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"
|
||||||
|
placeholder="请输入考试名称"
|
||||||
|
:maxlength="20"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="main_item">
|
||||||
|
<div class="signbox">
|
||||||
|
<div class="sign">
|
||||||
|
<img
|
||||||
|
src="@/assets/images/coursewareManage/asterisk.png"
|
||||||
|
alt=""
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<span style="margin-right: 3px">数据来源:</span>
|
||||||
|
</div>
|
||||||
|
<div class="btnbox">
|
||||||
|
<a-input
|
||||||
|
v-model:value="formData.source"
|
||||||
|
style="width: 400px; height: 40px; border-radius: 8px"
|
||||||
|
placeholder="请输入数据来源"
|
||||||
|
:maxlength="20"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="main_item2">
|
||||||
|
<div class="signbox">
|
||||||
|
<span style="margin-right: 3px">考试说明:</span>
|
||||||
|
</div>
|
||||||
|
<div class="textarea">
|
||||||
|
<a-textarea
|
||||||
|
v-model:value="formData.externalExplain"
|
||||||
|
placeholder="请输入考试说明"
|
||||||
|
allow-clear
|
||||||
|
show-count
|
||||||
|
:maxlength="200"
|
||||||
|
:rows="6"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="main_btns">
|
||||||
|
<a-button class="btn1" @click="closeDrawer">取消</a-button>
|
||||||
|
<a-button class="btn2" @click="confirm">确定</a-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</a-drawer>
|
||||||
|
</template>
|
||||||
|
<script setup>
|
||||||
|
import {defineEmits, defineProps, ref, watch} from "vue";
|
||||||
|
import STest from "./SelectTest.vue";
|
||||||
|
import dayjs from "dayjs";
|
||||||
|
import {Form, message} from "ant-design-vue";
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
info: {}
|
||||||
|
})
|
||||||
|
const visible = ref(false)
|
||||||
|
const initValue = {
|
||||||
|
examinationName: '',
|
||||||
|
examinationTestId: '',
|
||||||
|
examinationStartTime: '',
|
||||||
|
examinationEndTime: '',
|
||||||
|
examinationDuration: '',
|
||||||
|
passLine: '',
|
||||||
|
examType: 1,
|
||||||
|
source: "",
|
||||||
|
showAnswers: 2,
|
||||||
|
showAnalysis: 2,
|
||||||
|
scoringModel: 2,
|
||||||
|
questionArrangement: 4,
|
||||||
|
externalExplain: ""
|
||||||
|
}
|
||||||
|
const formData = ref(initValue)
|
||||||
|
|
||||||
|
const innerRule = {
|
||||||
|
examinationName: [
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: '请输入考试名称',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
examinationTestId: [
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: '请输入选择试卷',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
examinationStartTime: [
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: '请输入开始开始时间',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
examinationEndTime: [
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: '请输入开始结束时间',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
examinationDuration: [
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: '请输入考试时长',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
passLine: [
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: '请输入及格线',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
const outerRule = {
|
||||||
|
examinationName: [
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: '请输入考试名称',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
source: [
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: '请输入数据来源',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
const rulesRef = ref(innerRule);
|
||||||
|
|
||||||
|
const emit = defineEmits({})
|
||||||
|
const dateTime = ref([]);
|
||||||
|
const {resetFields, validate} = Form.useForm(formData, rulesRef);
|
||||||
|
|
||||||
|
watch(() => formData.value.examType, () => {
|
||||||
|
formData.value.examType === 1 ? rulesRef.value = innerRule : rulesRef.value = outerRule
|
||||||
|
})
|
||||||
|
|
||||||
|
watch([props, visible], () => {
|
||||||
|
resetFields(props.info)
|
||||||
|
dateTime.value = [props.info?.examinationStartTime || '', props.info?.examinationEndTime || '']
|
||||||
|
})
|
||||||
|
|
||||||
|
const closeDrawer = () => {
|
||||||
|
visible.value = false
|
||||||
|
resetFields()
|
||||||
|
dateTime.value = []
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
function timeChange(time, timeStr) {
|
||||||
|
formData.value.examinationStartTime = timeStr[0]
|
||||||
|
formData.value.examinationEndTime = timeStr[1]
|
||||||
|
}
|
||||||
|
|
||||||
|
const disabledDate = (current) => {
|
||||||
|
return current && current < dayjs().startOf('day');
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
async function confirm() {
|
||||||
|
await validate().catch(({errorFields}) => {
|
||||||
|
message.warning(errorFields[0].errors.join());
|
||||||
|
throw Error("数据校验不通过")
|
||||||
|
});
|
||||||
|
emit('update:info', {...formData.value})
|
||||||
|
closeDrawer()
|
||||||
|
}
|
||||||
|
|
||||||
|
function openDrawer() {
|
||||||
|
visible.value = true
|
||||||
|
}
|
||||||
|
|
||||||
|
const delTag = () => {
|
||||||
|
formData.value.examinationTestId = '';
|
||||||
|
formData.value.examinationTestName = '';
|
||||||
|
}
|
||||||
|
|
||||||
|
function changeOuter(v) {
|
||||||
|
formData.value.examType = v;
|
||||||
|
}
|
||||||
|
|
||||||
|
defineExpose({openDrawer})
|
||||||
|
</script>
|
||||||
|
<style lang="scss">
|
||||||
|
.ant-table-striped :deep(.table-striped) td {
|
||||||
|
background-color: #fafafa !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.outer {
|
||||||
|
background-color: #4ea6ff;
|
||||||
|
color: #fff;
|
||||||
|
border-radius: 5px;
|
||||||
|
border: 1px solid #a09292;
|
||||||
|
height: 36px;
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notOuter {
|
||||||
|
color: #000;
|
||||||
|
border-radius: 5px;
|
||||||
|
border: 1px solid #a09292;
|
||||||
|
background: #fff;
|
||||||
|
margin-right: 10px;
|
||||||
|
padding: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tag-style {
|
||||||
|
color: rgb(113, 113, 237);
|
||||||
|
background-color: #d7d1f7;
|
||||||
|
}
|
||||||
|
|
||||||
|
.addtestDrawer {
|
||||||
|
.drawerMain {
|
||||||
|
.header {
|
||||||
|
height: 73px;
|
||||||
|
border-bottom: 1px solid #e8e8e8;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
flex-shrink: 0;
|
||||||
|
|
||||||
|
.headerTitle {
|
||||||
|
font-size: 18px;
|
||||||
|
font-weight: 600;
|
||||||
|
color: #333333;
|
||||||
|
line-height: 25px;
|
||||||
|
margin-left: 24px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.contentMain {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
|
||||||
|
.main_left {
|
||||||
|
padding-right: 30px;
|
||||||
|
flex: 1;
|
||||||
|
border-right: 1px solid #e8e8e8;
|
||||||
|
|
||||||
|
.main_item {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
margin-top: 32px;
|
||||||
|
margin-bottom: 32px;
|
||||||
|
|
||||||
|
.signbox {
|
||||||
|
width: 120px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: end;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
.sign {
|
||||||
|
margin-right: 5px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.btnbox {
|
||||||
|
display: flex;
|
||||||
|
flex: 1;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
.xkbtn {
|
||||||
|
cursor: pointer;
|
||||||
|
width: 130px;
|
||||||
|
height: 40px;
|
||||||
|
background: #4ea6ff;
|
||||||
|
border-radius: 8px;
|
||||||
|
border: 0;
|
||||||
|
margin-right: 8px;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.main_item2 {
|
||||||
|
display: flex;
|
||||||
|
align-items: flex-start;
|
||||||
|
margin-bottom: 32px;
|
||||||
|
|
||||||
|
.textarea {
|
||||||
|
width: 400px;
|
||||||
|
|
||||||
|
.ant-input {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ant-input-textarea-show-count {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ant-input-textarea-show-count::after {
|
||||||
|
position: absolute;
|
||||||
|
right: 10px;
|
||||||
|
bottom: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ant-input {
|
||||||
|
border-radius: 8px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.signbox {
|
||||||
|
width: 120px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: end;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
.sign {
|
||||||
|
margin-right: 5px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.kqszbox {
|
||||||
|
.qdqtbox {
|
||||||
|
margin-left: 56px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.setbox {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
|
||||||
|
|
||||||
|
.timerbox {
|
||||||
|
margin-top: 6px;
|
||||||
|
margin-right: 32px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
flex-wrap: nowrap;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.btnbox2 {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: flex-start;
|
||||||
|
|
||||||
|
.xkbtn {
|
||||||
|
cursor: pointer;
|
||||||
|
width: 130px;
|
||||||
|
height: 40px;
|
||||||
|
background: #4ea6ff;
|
||||||
|
border-radius: 8px;
|
||||||
|
border: 0;
|
||||||
|
margin-right: 16px;
|
||||||
|
color: #fff;
|
||||||
|
margin-top: 16px;
|
||||||
|
margin-bottom: 60px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.main_table {
|
||||||
|
position: relative;
|
||||||
|
padding-bottom: 80px;
|
||||||
|
|
||||||
|
.ant-checkbox-wrapper {
|
||||||
|
align-items: center;
|
||||||
|
margin-top: -2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ant-table-selection-column {
|
||||||
|
padding: 0px !important;
|
||||||
|
padding-left: 5px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ant-table-thead > tr > th {
|
||||||
|
background-color: rgba(239, 244, 252, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
th.h {
|
||||||
|
background-color: #eff4fc !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ant-table-tbody
|
||||||
|
> tr:hover:not(.ant-table-expanded-row):not(.ant-table-row-selected)
|
||||||
|
> td {
|
||||||
|
background: #f6f9fd;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pa {
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
position: absolute;
|
||||||
|
bottom: 20px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.main_btns {
|
||||||
|
height: 72px;
|
||||||
|
width: 100%;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.16);
|
||||||
|
|
||||||
|
.btn1 {
|
||||||
|
width: 100px;
|
||||||
|
height: 40px;
|
||||||
|
border: 1px solid #4ea6ff;
|
||||||
|
border-radius: 8px;
|
||||||
|
color: #4ea6ff;
|
||||||
|
background-color: #fff;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn2 {
|
||||||
|
cursor: pointer;
|
||||||
|
width: 100px;
|
||||||
|
height: 40px;
|
||||||
|
background: #4ea6ff;
|
||||||
|
border-radius: 8px;
|
||||||
|
border: 0;
|
||||||
|
margin-left: 15px;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -163,7 +163,12 @@ const rowSelection = computed(() => ({
|
|||||||
selectedRowKeys: rowSelectKeys.value,
|
selectedRowKeys: rowSelectKeys.value,
|
||||||
onChange: onSelectChange,
|
onChange: onSelectChange,
|
||||||
preserveSelectedRowKeys: true,
|
preserveSelectedRowKeys: true,
|
||||||
|
getCheckboxProps: getCheckboxProps
|
||||||
}));
|
}));
|
||||||
|
const getCheckboxProps = () => ({
|
||||||
|
// 某几项默认禁止选中(R: 当state等于1时)
|
||||||
|
disabled: false
|
||||||
|
})
|
||||||
|
|
||||||
function onSelectChange(e, l) {
|
function onSelectChange(e, l) {
|
||||||
rowSelectKeys.value = e;
|
rowSelectKeys.value = e;
|
||||||
|
|||||||
@@ -37,6 +37,8 @@
|
|||||||
:showUploadList="false"
|
:showUploadList="false"
|
||||||
:data="{
|
:data="{
|
||||||
type: type,
|
type: type,
|
||||||
|
taskId: Number(id),
|
||||||
|
workId: datesource.info.id,
|
||||||
targetId: Number(id),
|
targetId: Number(id),
|
||||||
}"
|
}"
|
||||||
>
|
>
|
||||||
@@ -148,8 +150,7 @@
|
|||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
width: 500px;
|
width: 500px;
|
||||||
height: 40px;
|
height: 40px;"
|
||||||
"
|
|
||||||
:style="{
|
:style="{
|
||||||
background: errNum
|
background: errNum
|
||||||
? 'rgba(255, 116, 116, 0.1)'
|
? 'rgba(255, 116, 116, 0.1)'
|
||||||
@@ -199,6 +200,12 @@ export default {
|
|||||||
type: Boolean,
|
type: Boolean,
|
||||||
default: false,
|
default: false,
|
||||||
},
|
},
|
||||||
|
datesource: {
|
||||||
|
type: Object,
|
||||||
|
default: function () {
|
||||||
|
return {};
|
||||||
|
},
|
||||||
|
},
|
||||||
//type=3:面授课
|
//type=3:面授课
|
||||||
type: {
|
type: {
|
||||||
type: String,
|
type: String,
|
||||||
@@ -240,6 +247,7 @@ export default {
|
|||||||
|
|
||||||
const afterVisibleChange = (bool) => {
|
const afterVisibleChange = (bool) => {
|
||||||
console.log("state", bool);
|
console.log("state", bool);
|
||||||
|
console.log(props.datesource)
|
||||||
};
|
};
|
||||||
|
|
||||||
//上传文件
|
//上传文件
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
>
|
>
|
||||||
<div class="drawerMain">
|
<div class="drawerMain">
|
||||||
<div class="header">
|
<div class="header">
|
||||||
<div class="headerTitle">组员名单</div>
|
<div class="headerTitle">组员名单1</div>
|
||||||
<img
|
<img
|
||||||
style="width: 29px; height: 29px; cursor: pointer"
|
style="width: 29px; height: 29px; cursor: pointer"
|
||||||
src="../../assets/images/basicinfo/close.png"
|
src="../../assets/images/basicinfo/close.png"
|
||||||
@@ -295,7 +295,7 @@ export default {
|
|||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
deleteOne(value.record.key);
|
deleteOne(value.record.key,value.record);
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
删除
|
删除
|
||||||
@@ -323,12 +323,17 @@ export default {
|
|||||||
};
|
};
|
||||||
//点击确认批量删除弹窗
|
//点击确认批量删除弹窗
|
||||||
const sureDeModal = () => {
|
const sureDeModal = () => {
|
||||||
|
// 判断选择的人员中是否有小组长
|
||||||
|
let arr = [...state.tabledata].filter(x => [...state.selectedRowKeys].some(id => id === x.key)).filter(item => item.leaderId !== null);
|
||||||
|
if (arr.length > 0) {
|
||||||
|
return message.warning("选择人员中:"+arr[0].name + "是小组长,请勿删除!");
|
||||||
|
}
|
||||||
|
console.log(arr)
|
||||||
let obj = {
|
let obj = {
|
||||||
projectGroupId: props.chooseGroupId,
|
projectGroupId: props.chooseGroupId,
|
||||||
projectId: props.projectId,
|
projectId: props.projectId,
|
||||||
ids: state.selectedRowKeys,
|
ids: state.selectedRowKeys,
|
||||||
};
|
};
|
||||||
|
|
||||||
delGroupStudent(obj)
|
delGroupStudent(obj)
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
console.log(res, "删除成功");
|
console.log(res, "删除成功");
|
||||||
@@ -362,6 +367,7 @@ export default {
|
|||||||
groupId: value.groupId, //小组id
|
groupId: value.groupId, //小组id
|
||||||
group: value.groupName, //小组名
|
group: value.groupName, //小组名
|
||||||
studentId: value.studentId, //学生id
|
studentId: value.studentId, //学生id
|
||||||
|
leaderId: value.leaderId, //小组长
|
||||||
currentStageId: value.currentStageId, //当前关卡id
|
currentStageId: value.currentStageId, //当前关卡id
|
||||||
name: value.studentName, //用户名
|
name: value.studentName, //用户名
|
||||||
bum: value.studentDepartName, //部门
|
bum: value.studentDepartName, //部门
|
||||||
@@ -471,8 +477,11 @@ export default {
|
|||||||
//重新获取列表
|
//重新获取列表
|
||||||
getStu();
|
getStu();
|
||||||
};
|
};
|
||||||
const deleteOne = (id) => {
|
const deleteOne = (id,row) => {
|
||||||
// console.log(id, "fewfew");
|
console.log("row", row);
|
||||||
|
if (row.leaderId !== null) {
|
||||||
|
return message.warning(""+row.name + "是小组长,请勿删除!");
|
||||||
|
}
|
||||||
console.log(`${id}`);
|
console.log(`${id}`);
|
||||||
state.deone = true;
|
state.deone = true;
|
||||||
state.selectedRows = [];
|
state.selectedRows = [];
|
||||||
|
|||||||
@@ -1,20 +1,12 @@
|
|||||||
<!-- eslint-disable vue/no-use-v-if-with-v-for -->
|
<!-- eslint-disable vue/no-use-v-if-with-v-for -->
|
||||||
<template>
|
<template>
|
||||||
<a-drawer
|
<a-drawer :visible="Seevisible" class="drawerStyle seestu" placement="right" width="70%"
|
||||||
:visible="Seevisible"
|
@after-visible-change="afterVisibleChange">
|
||||||
class="drawerStyle seestu"
|
|
||||||
placement="right"
|
|
||||||
width="70%"
|
|
||||||
@after-visible-change="afterVisibleChange"
|
|
||||||
>
|
|
||||||
<div class="drawerMain">
|
<div class="drawerMain">
|
||||||
<div class="header">
|
<div class="header">
|
||||||
<div class="headerTitle">查看</div>
|
<div class="headerTitle">查看</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>
|
||||||
<a-spin v-if="loading" :spinning="loading" />
|
<a-spin v-if="loading" :spinning="loading" />
|
||||||
<div v-if="!loading" class="main">
|
<div v-if="!loading" class="main">
|
||||||
@@ -33,14 +25,11 @@
|
|||||||
<span class="total">/{{ rank.total }}</span>
|
<span class="total">/{{ rank.total }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<a-divider
|
<a-divider type="vertical" style="
|
||||||
type="vertical"
|
|
||||||
style="
|
|
||||||
height: 49px;
|
height: 49px;
|
||||||
margin-left: 34px;
|
margin-left: 34px;
|
||||||
background-color: rgba(170, 166, 166, 0.3);
|
background-color: rgba(170, 166, 166, 0.3);
|
||||||
"
|
" />
|
||||||
/>
|
|
||||||
<div class="sortbox" style="margin-left: 34px">
|
<div class="sortbox" style="margin-left: 34px">
|
||||||
<div class="sortname">完成必修</div>
|
<div class="sortname">完成必修</div>
|
||||||
<div class="sortnub">
|
<div class="sortnub">
|
||||||
@@ -49,17 +38,14 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<a-divider
|
<a-divider type="vertical" style="
|
||||||
type="vertical"
|
|
||||||
style="
|
|
||||||
height: 49px;
|
height: 49px;
|
||||||
margin-left: 34px;
|
margin-left: 34px;
|
||||||
background-color: rgba(170, 166, 166, 0.3);"
|
background-color: rgba(170, 166, 166, 0.3);" />
|
||||||
/>
|
|
||||||
<div class="sortbox" style="margin-left: 34px">
|
<div class="sortbox" style="margin-left: 34px">
|
||||||
<div class="sortname">已修证书</div>
|
<div class="sortname">已修证书</div>
|
||||||
<div class="sortnub">
|
<div class="sortnub">
|
||||||
<span class="nub1">{{ certCnt?certCnt:0 }}</span>
|
<span class="nub1">{{ 0 }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -71,22 +57,14 @@
|
|||||||
<div class="mainbox">
|
<div class="mainbox">
|
||||||
<a-collapse v-model:activeKey="stageListActive">
|
<a-collapse v-model:activeKey="stageListActive">
|
||||||
<template #expandIcon="{ isActive }">
|
<template #expandIcon="{ isActive }">
|
||||||
<img
|
<img style="margin-right: 20px" :src="
|
||||||
style="margin-right: 20px"
|
|
||||||
:src="
|
|
||||||
isActive
|
isActive
|
||||||
? require('../../assets/images/studentimg/open.png')
|
? require('../../assets/images/studentimg/open.png')
|
||||||
: require('../../assets/images/studentimg/close.png')
|
: require('../../assets/images/studentimg/close.png')
|
||||||
"
|
" />
|
||||||
/>
|
|
||||||
<div></div>
|
<div></div>
|
||||||
</template>
|
</template>
|
||||||
<a-collapse-panel
|
<a-collapse-panel v-for="value in stageList" :key="value.stageId" :header="value.stageName">
|
||||||
v-for="value in stageList"
|
|
||||||
:key="value.stageId"
|
|
||||||
:header="value.stageName"
|
|
||||||
|
|
||||||
>
|
|
||||||
<template #extra>
|
<template #extra>
|
||||||
<div @click.stop="">
|
<div @click.stop="">
|
||||||
<div class="rowbox">
|
<div class="rowbox">
|
||||||
@@ -101,16 +79,11 @@
|
|||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<div
|
<div class="rowclass" v-for="(item, key) in value.taskList" :key="key">
|
||||||
class="rowclass"
|
|
||||||
v-for="(item, key) in value.taskList"
|
|
||||||
:key="key"
|
|
||||||
>
|
|
||||||
|
|
||||||
<div class="leftclass">
|
<div class="leftclass">
|
||||||
<div>
|
<div>
|
||||||
<img
|
<img :src="
|
||||||
:src="
|
|
||||||
item.course === '在线'
|
item.course === '在线'
|
||||||
? require('../../assets/images/leveladd/zai.png')
|
? require('../../assets/images/leveladd/zai.png')
|
||||||
: item.course === '面授'
|
: item.course === '面授'
|
||||||
@@ -138,21 +111,18 @@
|
|||||||
: item.course === '评估'
|
: item.course === '评估'
|
||||||
? require('../../assets/images/leveladd/diao.png')
|
? require('../../assets/images/leveladd/diao.png')
|
||||||
: null
|
: null
|
||||||
"
|
" />
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="text1">{{ item.course }}</div>
|
<div class="text1">{{ item.course }}</div>
|
||||||
<div class="text2">{{ item.name }}</div>
|
<div class="text2">{{ item.name }}</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="alreadyclass">
|
<div class="alreadyclass">
|
||||||
<div class="alimg">
|
<div class="alimg">
|
||||||
<img
|
<img :src="
|
||||||
:src="
|
|
||||||
item.complete === '已完成'
|
item.complete === '已完成'
|
||||||
? require('../../assets/images/studentimg/complete.png')
|
? require('../../assets/images/studentimg/complete.png')
|
||||||
: require('../../assets/images/studentimg/notice.png')
|
: require('../../assets/images/studentimg/notice.png')
|
||||||
"
|
" />
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="altext">{{ item.complete }}</div>
|
<div class="altext">{{ item.complete }}</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -277,6 +247,7 @@ export default {
|
|||||||
let array = [];
|
let array = [];
|
||||||
if (data != undefined) {
|
if (data != undefined) {
|
||||||
data.map((value) => {
|
data.map((value) => {
|
||||||
|
console.log('我排序了吗---------value-----------------》', value)
|
||||||
let obj = {
|
let obj = {
|
||||||
course:
|
course:
|
||||||
value.type == 1
|
value.type == 1
|
||||||
@@ -318,6 +289,7 @@ export default {
|
|||||||
currentRatio: value.currentRatio,
|
currentRatio: value.currentRatio,
|
||||||
routerTaskId: value.routerTaskId,
|
routerTaskId: value.routerTaskId,
|
||||||
};
|
};
|
||||||
|
console.log('我排序了吗---------obj-----------------》', obj)
|
||||||
array.push(obj);
|
array.push(obj);
|
||||||
});
|
});
|
||||||
array.sort((a, b) => { return a.projectId - b.projectId })
|
array.sort((a, b) => { return a.projectId - b.projectId })
|
||||||
@@ -331,7 +303,8 @@ export default {
|
|||||||
console.log("查看了学员1", data);
|
console.log("查看了学员1", data);
|
||||||
let array = [];
|
let array = [];
|
||||||
//无阶段任务
|
//无阶段任务
|
||||||
if(data?.length ==1 && data[0].stageId ==0){
|
if (data?.length == 1 && data[0].id == 0) {
|
||||||
|
console.log("无阶段任务", data);
|
||||||
data.map((value) => {
|
data.map((value) => {
|
||||||
let obj = {
|
let obj = {
|
||||||
stageName: "无阶段任务",
|
stageName: "无阶段任务",
|
||||||
@@ -342,17 +315,19 @@ export default {
|
|||||||
array.push(obj);
|
array.push(obj);
|
||||||
});
|
});
|
||||||
} else { //有阶段
|
} else { //有阶段
|
||||||
|
console.log("有阶段", data);
|
||||||
data.map((value) => {
|
data.map((value) => {
|
||||||
|
console.log("有阶段value", value);
|
||||||
let obj = {
|
let obj = {
|
||||||
stageName: value.stageName,
|
stageName: value.name,
|
||||||
stageId: value.stageId,
|
stageId: value.id,
|
||||||
remark: value.remark,
|
remark: value.remark,
|
||||||
taskList: taskList(value.taskList),
|
taskList: taskList(value.taskList),
|
||||||
};
|
};
|
||||||
if(value.stageId >0){
|
if (value.id > 0) {
|
||||||
array.push(obj);
|
array.push(obj);
|
||||||
}
|
}
|
||||||
|
console.log("有阶段array", array);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -366,9 +341,10 @@ export default {
|
|||||||
};
|
};
|
||||||
studentProcess(obj).then((res) => {
|
studentProcess(obj).then((res) => {
|
||||||
state.loading = false
|
state.loading = false
|
||||||
console.log("查看了学员", res.data.data);
|
console.log("查看了学员", res.data);
|
||||||
let result = res.data.data;
|
let result = res.data.data;
|
||||||
state.userName = result.projectInfo.userName;
|
console.log("查看了学员result:", result);
|
||||||
|
state.userName = result.projectInfo.name;
|
||||||
state.deptName = result.projectInfo.deptName;
|
state.deptName = result.projectInfo.deptName;
|
||||||
state.jobName = result.projectInfo.jobName;
|
state.jobName = result.projectInfo.jobName;
|
||||||
state.certCnt = result.projectInfo.certCnt == null ? 0 : result.projectInfo.certCnt;
|
state.certCnt = result.projectInfo.certCnt == null ? 0 : result.projectInfo.certCnt;
|
||||||
@@ -403,20 +379,24 @@ export default {
|
|||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
.seestu {
|
.seestu {
|
||||||
.ant-drawer-content-wrapper {
|
.ant-drawer-content-wrapper {
|
||||||
|
|
||||||
// max-width: 1000px;
|
// max-width: 1000px;
|
||||||
.ant-drawer-header {
|
.ant-drawer-header {
|
||||||
display: none !important;
|
display: none !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ant-drawer-body {
|
.ant-drawer-body {
|
||||||
padding: 0;
|
padding: 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.drawerMain {
|
.drawerMain {
|
||||||
min-width: 600px;
|
min-width: 600px;
|
||||||
margin: 0px 32px 0px 32px;
|
margin: 0px 32px 0px 32px;
|
||||||
overflow-x: auto;
|
overflow-x: auto;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
|
||||||
.header {
|
.header {
|
||||||
height: 73px;
|
height: 73px;
|
||||||
border-bottom: 1px solid #e8e8e8;
|
border-bottom: 1px solid #e8e8e8;
|
||||||
@@ -426,6 +406,7 @@ export default {
|
|||||||
// background-color: red;
|
// background-color: red;
|
||||||
margin-bottom: 20px;
|
margin-bottom: 20px;
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
|
|
||||||
.headerTitle {
|
.headerTitle {
|
||||||
font-size: 18px;
|
font-size: 18px;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
@@ -434,11 +415,13 @@ export default {
|
|||||||
// margin-left: 24px;
|
// margin-left: 24px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.main {
|
.main {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
padding-bottom: 80px;
|
padding-bottom: 80px;
|
||||||
|
|
||||||
.stuinfor {
|
.stuinfor {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
@@ -448,35 +431,43 @@ export default {
|
|||||||
background-image: url("../../assets/images/studentimg/bgimg.png");
|
background-image: url("../../assets/images/studentimg/bgimg.png");
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
background-position: right;
|
background-position: right;
|
||||||
|
|
||||||
.stumation {
|
.stumation {
|
||||||
margin-left: 24px;
|
margin-left: 24px;
|
||||||
|
|
||||||
.stuname {
|
.stuname {
|
||||||
color: #333333;
|
color: #333333;
|
||||||
font-size: 18px;
|
font-size: 18px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.stugangw {
|
.stugangw {
|
||||||
color: #999999;
|
color: #999999;
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
margin-top: 7px;
|
margin-top: 7px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.sortbox {
|
.sortbox {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
margin-left: 114px;
|
margin-left: 114px;
|
||||||
|
|
||||||
.sortname {
|
.sortname {
|
||||||
color: #666660;
|
color: #666660;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.sortnub {
|
.sortnub {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
margin-top: 7px;
|
margin-top: 7px;
|
||||||
|
|
||||||
.nub1 {
|
.nub1 {
|
||||||
color: #0060ff;
|
color: #0060ff;
|
||||||
font-size: 22px;
|
font-size: 22px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.total {
|
.total {
|
||||||
color: #999999;
|
color: #999999;
|
||||||
font-size: 22px;
|
font-size: 22px;
|
||||||
@@ -484,19 +475,23 @@ export default {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.secondrow {
|
.secondrow {
|
||||||
margin-top: 32px;
|
margin-top: 32px;
|
||||||
display: flex;
|
display: flex;
|
||||||
|
|
||||||
.rowleft {
|
.rowleft {
|
||||||
color: rgba(51, 51, 51, 1);
|
color: rgba(51, 51, 51, 1);
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.mainbox {
|
.mainbox {
|
||||||
// height: 463px;
|
// height: 463px;
|
||||||
margin-right: 37px;
|
margin-right: 37px;
|
||||||
margin-top: 32px;
|
margin-top: 32px;
|
||||||
|
|
||||||
//border: 1px solid rgba(221, 238, 255, 1);
|
//border: 1px solid rgba(221, 238, 255, 1);
|
||||||
//border-radius: 6px;
|
//border-radius: 6px;
|
||||||
.rowbox {
|
.rowbox {
|
||||||
@@ -510,6 +505,7 @@ export default {
|
|||||||
background: rgba(64, 158, 255, 0.1);
|
background: rgba(64, 158, 255, 0.1);
|
||||||
margin-right: 480px;
|
margin-right: 480px;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
|
||||||
.shuom {
|
.shuom {
|
||||||
color: rgba(64, 158, 255, 1);
|
color: rgba(64, 158, 255, 1);
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
@@ -517,23 +513,28 @@ export default {
|
|||||||
margin-right: 5px;
|
margin-right: 5px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.ant-collapse {
|
.ant-collapse {
|
||||||
background-color: #ffffff;
|
background-color: #ffffff;
|
||||||
border: 0;
|
border: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ant-collapse-content>.ant-collapse-content-box {
|
.ant-collapse-content>.ant-collapse-content-box {
|
||||||
padding: 0;
|
padding: 0;
|
||||||
border: 0;
|
border: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ant-collapse>.ant-collapse-item {
|
.ant-collapse>.ant-collapse-item {
|
||||||
border: 1px solid rgba(221, 238, 255, 1);
|
border: 1px solid rgba(221, 238, 255, 1);
|
||||||
border-radius: 6px;
|
border-radius: 6px;
|
||||||
margin-bottom: 15px;
|
margin-bottom: 15px;
|
||||||
border-bottom: 0px;
|
border-bottom: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ant-collapse-content {
|
.ant-collapse-content {
|
||||||
border-top: 0;
|
border-top: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ant-collapse-header {
|
.ant-collapse-header {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
@@ -543,16 +544,19 @@ export default {
|
|||||||
color: rgba(51, 51, 51, 1);
|
color: rgba(51, 51, 51, 1);
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
}
|
}
|
||||||
|
|
||||||
.rowclass {
|
.rowclass {
|
||||||
height: 81px;
|
height: 81px;
|
||||||
border-bottom: 1px solid rgba(221, 238, 255, 1);
|
border-bottom: 1px solid rgba(221, 238, 255, 1);
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
|
||||||
.leftclass {
|
.leftclass {
|
||||||
display: flex;
|
display: flex;
|
||||||
margin-left: 25px;
|
margin-left: 25px;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
|
||||||
.text1 {
|
.text1 {
|
||||||
color: #000000;
|
color: #000000;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
@@ -561,6 +565,7 @@ export default {
|
|||||||
word-break: keep-all;
|
word-break: keep-all;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
}
|
}
|
||||||
|
|
||||||
.text2 {
|
.text2 {
|
||||||
color: rgba(51, 51, 51, 0.8);
|
color: rgba(51, 51, 51, 0.8);
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
@@ -571,13 +576,16 @@ export default {
|
|||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.alreadyclass {
|
.alreadyclass {
|
||||||
display: flex;
|
display: flex;
|
||||||
margin-right: 57px;
|
margin-right: 57px;
|
||||||
|
|
||||||
.alimg {
|
.alimg {
|
||||||
height: 16px;
|
height: 16px;
|
||||||
width: 16px;
|
width: 16px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.altext {
|
.altext {
|
||||||
color: rgba(56, 125, 247, 1);
|
color: rgba(56, 125, 247, 1);
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
@@ -589,6 +597,7 @@ export default {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.btnn {
|
.btnn {
|
||||||
height: 72px;
|
height: 72px;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
@@ -600,6 +609,7 @@ export default {
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.16);
|
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.16);
|
||||||
|
|
||||||
.btn2 {
|
.btn2 {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
width: 100px;
|
width: 100px;
|
||||||
@@ -612,5 +622,4 @@ export default {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}</style>
|
||||||
</style>
|
|
||||||
|
|||||||
@@ -175,7 +175,12 @@ const rowSelection = computed(() => ({
|
|||||||
selectedRowKeys: rowSelectKeys.value,
|
selectedRowKeys: rowSelectKeys.value,
|
||||||
onChange: onSelectChange,
|
onChange: onSelectChange,
|
||||||
preserveSelectedRowKeys: true,
|
preserveSelectedRowKeys: true,
|
||||||
|
getCheckboxProps: getCheckboxProps
|
||||||
}));
|
}));
|
||||||
|
const getCheckboxProps = () => ({
|
||||||
|
// 某几项默认禁止选中(R: 当state等于1时)
|
||||||
|
disabled: false
|
||||||
|
})
|
||||||
|
|
||||||
function onSelectChange(e, l) {
|
function onSelectChange(e, l) {
|
||||||
rowSelectKeys.value = e;
|
rowSelectKeys.value = e;
|
||||||
|
|||||||
@@ -690,11 +690,11 @@ export default {
|
|||||||
if (!state.condition) return message.warning("请设置获得条件");
|
if (!state.condition) return message.warning("请设置获得条件");
|
||||||
if (state.condition == 1 && !state.large)
|
if (state.condition == 1 && !state.large)
|
||||||
return message.warning("请选择完成项目类型");
|
return message.warning("请选择完成项目类型");
|
||||||
if (state.condition == 2 && !state.selectStageId)
|
if (state.condition == 2 && !state.selectStageName)
|
||||||
return message.warning("请选择完成阶段");
|
return message.warning("请选择完成阶段");
|
||||||
if (state.condition == 3 && !state.selectTaskId)
|
if (state.condition == 3 && !state.selectTaskName)
|
||||||
return message.warning("请选择完成任务");
|
return message.warning("请选择完成任务");
|
||||||
if (state.condition == 4 && !state.selectExamId)
|
if (state.condition == 4 && !state.selectExamName)
|
||||||
return message.warning("请选择考试");
|
return message.warning("请选择考试");
|
||||||
if (state.condition == 5 && !state.score)
|
if (state.condition == 5 && !state.score)
|
||||||
return message.warning("请输入积分");
|
return message.warning("请输入积分");
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
>
|
>
|
||||||
<div class="drawerMain">
|
<div class="drawerMain">
|
||||||
<div class="header">
|
<div class="header">
|
||||||
<div class="headerTitle">导入小组长</div>
|
<div class="headerTitle">{{ title }}</div>
|
||||||
<img
|
<img
|
||||||
style="width: 29px; height: 29px; cursor: pointer"
|
style="width: 29px; height: 29px; cursor: pointer"
|
||||||
src="../../../assets/images/basicinfo/close.png"
|
src="../../../assets/images/basicinfo/close.png"
|
||||||
@@ -64,7 +64,6 @@
|
|||||||
<a-progress :percent="file.percent"/>
|
<a-progress :percent="file.percent"/>
|
||||||
</div>
|
</div>
|
||||||
<div class="curloading">
|
<div class="curloading">
|
||||||
<div class="cur">{{ file.percent }}%</div>
|
|
||||||
<div style="color: #387df7; margin-left: 20px; cursor: pointer"
|
<div style="color: #387df7; margin-left: 20px; cursor: pointer"
|
||||||
v-if="file.uploadState?.status === 'FAILED'" @click="downloadErrorData(file.uploadState?.url)">
|
v-if="file.uploadState?.status === 'FAILED'" @click="downloadErrorData(file.uploadState?.url)">
|
||||||
下载失败数据
|
下载失败数据
|
||||||
@@ -102,6 +101,7 @@ import success from "@/assets/images/success.png";
|
|||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
url: String,
|
url: String,
|
||||||
|
title: String,
|
||||||
accept: String,
|
accept: String,
|
||||||
fileType: Object,
|
fileType: Object,
|
||||||
data: Object,
|
data: Object,
|
||||||
|
|||||||
@@ -135,6 +135,7 @@
|
|||||||
:type="1"
|
:type="1"
|
||||||
:id="projectTaskInfo?.id"
|
:id="projectTaskInfo?.id"
|
||||||
:pid="projectTaskInfo?.projectId"
|
:pid="projectTaskInfo?.projectId"
|
||||||
|
:datesource="projectTaskInfo"
|
||||||
v-model:searchTaskList="searchTaskList"
|
v-model:searchTaskList="searchTaskList"
|
||||||
/>
|
/>
|
||||||
<!-- 查看作业抽屉 -->
|
<!-- 查看作业抽屉 -->
|
||||||
|
|||||||
@@ -473,8 +473,8 @@ const tablecolumns = ref([
|
|||||||
1: "导入",
|
1: "导入",
|
||||||
2: "导入",
|
2: "导入",
|
||||||
3: "导入",
|
3: "导入",
|
||||||
4: "报名",
|
4: "导入",
|
||||||
5: "导入",
|
5: "报名",
|
||||||
6: "导入",
|
6: "导入",
|
||||||
}[source]),
|
}[source]),
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -953,7 +953,9 @@
|
|||||||
<div v-if="checked4" class="cstm_items main_item">
|
<div v-if="checked4" class="cstm_items main_item">
|
||||||
<div class="signbox"></div>
|
<div class="signbox"></div>
|
||||||
<div class="btnbox">
|
<div class="btnbox">
|
||||||
<button class="xkbtn" @click="showAssessment">选择评估</button>
|
<AssessmentList v-model:assessmentName="assessmentName" v-model:assessmentId="assessmentId">
|
||||||
|
<button class="xkbtn" @click="showAssessment" style="margin-bottom: 0;margin-top: 0">选择评估</button>
|
||||||
|
</AssessmentList>
|
||||||
<div v-if="assessmentId > 0">
|
<div v-if="assessmentId > 0">
|
||||||
<a-tag closable @close="removePG" color="processing">
|
<a-tag closable @close="removePG" color="processing">
|
||||||
<span style="font-size: 14px; line-height: 33px">
|
<span style="font-size: 14px; line-height: 33px">
|
||||||
@@ -961,54 +963,40 @@
|
|||||||
</span>
|
</span>
|
||||||
</a-tag>
|
</a-tag>
|
||||||
</div>
|
</div>
|
||||||
<AssessmentList
|
|
||||||
v-model:assessmentVisible="assessmentVisible"
|
|
||||||
v-model:assessmentName="assessmentName"
|
|
||||||
:assessmentId="assessmentId"
|
|
||||||
@checkedAss="getCheckedAss"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="cstm_items main_item">
|
<div class="cstm_items main_item">
|
||||||
<div class="signbox"></div>
|
<div class="signbox"></div>
|
||||||
<div class="btnbox">
|
<div class="btnbox">
|
||||||
<button class="xkbtn" @click="showDrawerAddHomework">
|
<add-homework v-model:info="workInfo">
|
||||||
|
<button class="xkbtn" style="margin-bottom: 0;margin-top: 0">
|
||||||
配置作业
|
配置作业
|
||||||
</button>
|
</button>
|
||||||
<div v-if="EditWorkId > 0">
|
</add-homework>
|
||||||
|
<div v-if="workInfo.workName">
|
||||||
<a-tag closable @close="logW" color="processing">
|
<a-tag closable @close="logW" color="processing">
|
||||||
<span style="font-size: 14px; line-height: 33px">
|
<span style="font-size: 14px; line-height: 33px">
|
||||||
{{ workName }}
|
{{ workInfo.workName }}
|
||||||
</span>
|
</span>
|
||||||
</a-tag>
|
</a-tag>
|
||||||
</div>
|
</div>
|
||||||
<add-homework
|
|
||||||
v-model:addhomeworkVisible="addhomeworkvisible"
|
|
||||||
@getWork="getWork"
|
|
||||||
:faceLevel="true"
|
|
||||||
v-model:EditWorkId="EditWorkId"
|
|
||||||
v-model:workName="workName"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="cstm_items main_item">
|
<div class="cstm_items main_item">
|
||||||
<div class="signbox"></div>
|
<div class="signbox"></div>
|
||||||
<div class="btnbox">
|
<div class="btnbox">
|
||||||
<button class="xkbtn" @click="showDrawerAddTest">配置考试</button>
|
<add-test v-model:info="examInfo">
|
||||||
<div v-if="EditTestId > 0">
|
<button class="xkbtn" style="margin-bottom: 0;margin-top: 0">配置考试</button>
|
||||||
|
</add-test>
|
||||||
|
<div v-if="examInfo.examinationName">
|
||||||
<a-tag closable @close="logT" color="processing">
|
<a-tag closable @close="logT" color="processing">
|
||||||
<span style="font-size: 14px; line-height: 33px">
|
<span style="font-size: 14px; line-height: 33px">
|
||||||
{{ testName }}
|
{{ examInfo.examinationName }}
|
||||||
</span>
|
</span>
|
||||||
</a-tag>
|
</a-tag>
|
||||||
</div>
|
</div>
|
||||||
<add-test
|
|
||||||
v-model:addtestVisible="addtestvisible"
|
|
||||||
v-model:EditTestId="EditTestId"
|
|
||||||
v-model:testName="testName"
|
|
||||||
:faceLevel="true"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!--
|
<!--
|
||||||
@@ -1036,7 +1024,7 @@
|
|||||||
</a-checkbox>
|
</a-checkbox>
|
||||||
</div>
|
</div>
|
||||||
</div> -->
|
</div> -->
|
||||||
<div class="cstm_items items_fj">
|
<div class="cstm_items items_fj" style="height:80px">
|
||||||
<div class="signbox">
|
<div class="signbox">
|
||||||
<span style="margin-right: 3px"></span>
|
<span style="margin-right: 3px"></span>
|
||||||
</div>
|
</div>
|
||||||
@@ -1503,15 +1491,11 @@ import {
|
|||||||
computed,
|
computed,
|
||||||
} from "vue";
|
} from "vue";
|
||||||
|
|
||||||
import * as api from "../../api/indexInvist.js";
|
|
||||||
import * as apis from "../../api/indexTaskManage";
|
import * as apis from "../../api/indexTaskManage";
|
||||||
import {message} from "ant-design-vue";
|
import {message} from "ant-design-vue";
|
||||||
import {useRouter, useRoute} from "vue-router";
|
import {useRouter, useRoute} from "vue-router";
|
||||||
import CommonStudent from "@/components/student/CommonStudent";
|
import CommonStudent from "@/components/student/CommonStudent";
|
||||||
import OwnerTableModelStudent from "@/components/student/OwnerTableModelStudent";
|
import OwnerTableModelStudent from "@/components/student/OwnerTableModelStudent";
|
||||||
// import StuAdd from "../../components/drawers/StuAdd";
|
|
||||||
// import OwnPower from "../../components/drawers/OwnPower.vue";
|
|
||||||
// import Corpowerlist from "../../components/drawers/CorPowerlist.vue";
|
|
||||||
import addOnlineCourse from "../../components/Modals/addOnlineCourse.vue";
|
import addOnlineCourse from "../../components/Modals/addOnlineCourse.vue";
|
||||||
|
|
||||||
import ProjOwnerShip from "../../components/drawers/ProjectOwn";
|
import ProjOwnerShip from "../../components/drawers/ProjectOwn";
|
||||||
@@ -1550,11 +1534,11 @@ import SeeModal from "./components/seeModal.vue";
|
|||||||
import CourseModal from "./courseModal.vue";
|
import CourseModal from "./courseModal.vue";
|
||||||
import * as moment from "moment";
|
import * as moment from "moment";
|
||||||
import TwoDimensionalCode from "../../components/TwoDimensionalCode.vue";
|
import TwoDimensionalCode from "../../components/TwoDimensionalCode.vue";
|
||||||
import {codeUrl, toDate} from "../../api/method";
|
import {codeUrl, toDate} from "@/api/method";
|
||||||
import {queryWorkDetailById} from "@/api/indexWork";
|
import {queryWorkDetailById} from "@/api/indexWork";
|
||||||
import {queryExaminationDetailById} from "@/api/indexExam";
|
import {queryExaminationDetailById} from "@/api/indexExam";
|
||||||
import AddHomework from "../../components/drawers/AddHomework.vue";
|
import AddHomework from "../../components/drawers/CommonHomework.vue";
|
||||||
import AddTest from "../../components/drawers/AddTest.vue";
|
import AddTest from "../../components/drawers/CommonTest.vue";
|
||||||
import TableStudent from "@/components/student/TableStudent";
|
import TableStudent from "@/components/student/TableStudent";
|
||||||
import FJUpload from "@/components/common/FJUpload";
|
import FJUpload from "@/components/common/FJUpload";
|
||||||
import {updateStudent} from "@/api/indexProjStu";
|
import {updateStudent} from "@/api/indexProjStu";
|
||||||
@@ -1562,7 +1546,6 @@ import {useStore} from "vuex";
|
|||||||
import DropDown from "@/components/common/DropDown";
|
import DropDown from "@/components/common/DropDown";
|
||||||
import {checkPer} from "@/utils/utils";
|
import {checkPer} from "@/utils/utils";
|
||||||
import dayjs from "dayjs";
|
import dayjs from "dayjs";
|
||||||
// import { commonExport } from '@/utils/commonExcel'
|
|
||||||
|
|
||||||
//列表表格
|
//列表表格
|
||||||
const columns1 = [
|
const columns1 = [
|
||||||
@@ -2171,6 +2154,8 @@ export default defineComponent({
|
|||||||
const store = useStore();
|
const store = useStore();
|
||||||
|
|
||||||
const state = reactive({
|
const state = reactive({
|
||||||
|
workInfo:{},
|
||||||
|
examInfo:{},
|
||||||
tableLoading: false,
|
tableLoading: false,
|
||||||
//新加
|
//新加
|
||||||
stuColumns: [
|
stuColumns: [
|
||||||
@@ -3193,13 +3178,11 @@ export default defineComponent({
|
|||||||
const showDrawerAddTest = () => {
|
const showDrawerAddTest = () => {
|
||||||
state.addtestvisible = true;
|
state.addtestvisible = true;
|
||||||
};
|
};
|
||||||
const logW = (e) => {
|
const logW = () => {
|
||||||
state.EditWorkId = null;
|
state.workInfo = {}
|
||||||
console.log(e);
|
|
||||||
};
|
};
|
||||||
const logT = (e) => {
|
const logT = () => {
|
||||||
state.EditTestId = 0;
|
state.examInfo = {}
|
||||||
console.log(e);
|
|
||||||
};
|
};
|
||||||
const removePG = () => {
|
const removePG = () => {
|
||||||
console.log("11111");
|
console.log("11111");
|
||||||
@@ -3670,13 +3653,7 @@ export default defineComponent({
|
|||||||
startTime = dayjs(state.xjkkinputV3[0]).format('YYYY-MM-DD HH:mm') //parseInt(state.xjkkinputV3[0].$d.getTime() / 1000);
|
startTime = dayjs(state.xjkkinputV3[0]).format('YYYY-MM-DD HH:mm') //parseInt(state.xjkkinputV3[0].$d.getTime() / 1000);
|
||||||
endTime = dayjs(state.xjkkinputV3[1]).format('YYYY-MM-DD HH:mm') //parseInt(state.xjkkinputV3[1].$d.getTime() / 1000);
|
endTime = dayjs(state.xjkkinputV3[1]).format('YYYY-MM-DD HH:mm') //parseInt(state.xjkkinputV3[1].$d.getTime() / 1000);
|
||||||
}
|
}
|
||||||
// console.log("state.validate", state.validate);
|
const offName = await validateName({ name: state.xjkkinputV1, type: 5 ,id:state.offcoursePlanId}).then(res => {
|
||||||
|
|
||||||
// if (!state.validate) {
|
|
||||||
// message.destroy();
|
|
||||||
// return message.warning("该开课名称已存在");
|
|
||||||
// }
|
|
||||||
const offName = await validateName({ name: state.xjkkinputV1, type: 5 }).then(res => {
|
|
||||||
console.log(res,res.data.data);
|
console.log(res,res.data.data);
|
||||||
return res.data.data === 1;
|
return res.data.data === 1;
|
||||||
});
|
});
|
||||||
@@ -3706,6 +3683,8 @@ const offName = await validateName({ name: state.xjkkinputV1, type: 5 }).then(re
|
|||||||
// signWordFlag: state.xjkkradioV1 === 1 ? 1 : 0, //签到是否需要口令:1是0否
|
// signWordFlag: state.xjkkradioV1 === 1 ? 1 : 0, //签到是否需要口令:1是0否
|
||||||
teacherId: state.member.value,
|
teacherId: state.member.value,
|
||||||
teacher: state.member.name,
|
teacher: state.member.name,
|
||||||
|
workInfo: state.workInfo,//提交的作业信息
|
||||||
|
examInfo: state.examInfo//提交的考试信息
|
||||||
};
|
};
|
||||||
console.log(postData);
|
console.log(postData);
|
||||||
const checkList = [
|
const checkList = [
|
||||||
@@ -3735,30 +3714,14 @@ const offName = await validateName({ name: state.xjkkinputV1, type: 5 }).then(re
|
|||||||
state.offcourseId = item.offcourseId;
|
state.offcourseId = item.offcourseId;
|
||||||
state.offcoursePlanId = item.id;
|
state.offcoursePlanId = item.id;
|
||||||
|
|
||||||
if (item.evaluateId) {
|
|
||||||
api
|
|
||||||
.queryAppraiseDetailById({assessmentId: item.evaluateId})
|
|
||||||
.then((res) => {
|
|
||||||
state.assessmentName = res.data.data.assessmentName;
|
|
||||||
})
|
|
||||||
.catch();
|
|
||||||
}
|
|
||||||
if (item.homeWorkId) {
|
if (item.homeWorkId) {
|
||||||
queryWorkDetailById({workId: item.homeWorkId}).then((res) => {
|
queryWorkDetailById({workId: item.homeWorkId}).then((res) => state.workInfo = res.data.data);
|
||||||
state.workName = res.data.data.workName;
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
if (item.testId) {
|
if (item.testId) {
|
||||||
queryExaminationDetailById({examinationId: item.testId}).then(
|
queryExaminationDetailById({examinationId: item.testId}).then((res) => state.examInfo = res.data.data);
|
||||||
(res) => {
|
|
||||||
state.testName = res.data.data.examinationName;
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log("res");
|
|
||||||
console.log("获取面授课开课详情", item);
|
console.log("获取面授课开课详情", item);
|
||||||
|
|
||||||
state.xjkkinputV2 = item.address;
|
state.xjkkinputV2 = item.address;
|
||||||
state.checked1 = item.applyFlag === 1 ? true : false;
|
state.checked1 = item.applyFlag === 1 ? true : false;
|
||||||
let arrss = item.attach.split(",");
|
let arrss = item.attach.split(",");
|
||||||
@@ -3781,7 +3744,8 @@ const offName = await validateName({ name: state.xjkkinputV1, type: 5 }).then(re
|
|||||||
(state.comLeave =
|
(state.comLeave =
|
||||||
item.completeType.split(",")[1] == "1" ? true : false),
|
item.completeType.split(",")[1] == "1" ? true : false),
|
||||||
(state.checked4 = item.evalFlag === 1 ? true : false);
|
(state.checked4 = item.evalFlag === 1 ? true : false);
|
||||||
state.assessmentId = String(item.evaluateId);
|
state.assessmentName = item.assessmentName;
|
||||||
|
state.assessmentId = String(item.assessmentId);
|
||||||
state.EditTestId = Number(item.testId);
|
state.EditTestId = Number(item.testId);
|
||||||
state.EditWorkId = String(item.homeWorkId);
|
state.EditWorkId = String(item.homeWorkId);
|
||||||
state.xjkkinputV1 = item.name;
|
state.xjkkinputV1 = item.name;
|
||||||
@@ -4675,7 +4639,6 @@ const offName = await validateName({ name: state.xjkkinputV1, type: 5 }).then(re
|
|||||||
};
|
};
|
||||||
const disabledDate = (current) => {
|
const disabledDate = (current) => {
|
||||||
// Can not select days before today and today
|
// Can not select days before today and today
|
||||||
console.log("1111", dayjs().endOf("day"));
|
|
||||||
return current && current < dayjs().startOf("day");
|
return current && current < dayjs().startOf("day");
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -300,8 +300,6 @@ export default defineComponent({
|
|||||||
const state = reactive({
|
const state = reactive({
|
||||||
imgList: [],
|
imgList: [],
|
||||||
categoryName: "",
|
categoryName: "",
|
||||||
ceshi: "https://u-pre.boe.com/upload/测试下载ppt2-1671002026755.pptx",
|
|
||||||
ceshi2: "http://43.143.139.204:12016/测试下载ppt3-1671001683026.pptx",
|
|
||||||
locationHref:
|
locationHref:
|
||||||
location.href.indexOf("http://") !== -1
|
location.href.indexOf("http://") !== -1
|
||||||
? "http://43.143.139.204:12016/"
|
? "http://43.143.139.204:12016/"
|
||||||
|
|||||||
@@ -169,13 +169,6 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="inname">路径图名称</div>
|
<div class="inname">路径图名称</div>
|
||||||
<div class="in road">
|
<div class="in road">
|
||||||
<!-- <a-input-->
|
|
||||||
<!-- v-model:value="pathName"-->
|
|
||||||
<!-- maxlength="20"-->
|
|
||||||
<!-- style="border-radius: 4px"-->
|
|
||||||
<!-- placeholder="请输入学习路径名称"-->
|
|
||||||
<!-- />-->
|
|
||||||
<!-- <div class="showcount">{{ pathName.length }}/20</div>-->
|
|
||||||
<NameInput
|
<NameInput
|
||||||
placeholder="请输入路径名称"
|
placeholder="请输入路径名称"
|
||||||
v-model:value="pathName"
|
v-model:value="pathName"
|
||||||
@@ -218,10 +211,6 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="inname">路径图背景</div>
|
<div class="inname">路径图背景</div>
|
||||||
<div class="in learnBg">
|
<div class="in learnBg">
|
||||||
<!-- <img class="im" src="../../assets/px.jpg" />
|
|
||||||
<img class="im" src="../../assets/px.jpg" />
|
|
||||||
<img class="im" src="../../assets/px.jpg" /> -->
|
|
||||||
|
|
||||||
<div
|
<div
|
||||||
@click="chooseImg(item)"
|
@click="chooseImg(item)"
|
||||||
v-for="(item, index) in imgData"
|
v-for="(item, index) in imgData"
|
||||||
@@ -233,13 +222,13 @@
|
|||||||
? '2px solid rgba(78, 166, 255, 1)'
|
? '2px solid rgba(78, 166, 255, 1)'
|
||||||
: '1px solid #C7CBD2',
|
: '1px solid #C7CBD2',
|
||||||
'background-image': 'url(' + item.value.split(',')[0] + ')',
|
'background-image': 'url(' + item.value.split(',')[0] + ')',
|
||||||
display: index >= 5 ? 'none' : 'flex',
|
display: index >= 3 ? 'none' : 'flex',
|
||||||
}"
|
}"
|
||||||
style="background-size: 100% 100%"
|
style="background-size: 100% 100%"
|
||||||
></div>
|
></div>
|
||||||
<div
|
<div
|
||||||
@click="showLearnBgMore"
|
@click="showLearnBgMore"
|
||||||
v-if="imgData.length > 5"
|
v-if="imgData.length > 3"
|
||||||
class="learnBgItem learnBgMore"
|
class="learnBgItem learnBgMore"
|
||||||
>
|
>
|
||||||
查看更多 <img src="../../assets/images/projectadd/go.png" />
|
查看更多 <img src="../../assets/images/projectadd/go.png" />
|
||||||
@@ -255,7 +244,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="btn">
|
<div class="btn">
|
||||||
<button class="samtn btn1" @click="handleOut">取消</button>
|
<button class="samtn btn1" @click="handleOut">取消</button>
|
||||||
<button class="samtn btn2" @click="createLearnPath">确定</button>
|
<a-button class="samtn btn2" @click="createLearnPath" :loading="confirmLoading">确定</a-button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
@@ -297,13 +286,6 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="inname">路径图名称</div>
|
<div class="inname">路径图名称</div>
|
||||||
<div class="in road">
|
<div class="in road">
|
||||||
<!-- <a-input-->
|
|
||||||
<!-- v-model:value="pathName"-->
|
|
||||||
<!-- maxlength="20"-->
|
|
||||||
<!-- style="border-radius: 4px"-->
|
|
||||||
<!-- placeholder="请输入学习路径名称"-->
|
|
||||||
<!-- />-->
|
|
||||||
<!-- <div class="showcount">{{ pathName.length }}/20</div>-->
|
|
||||||
<NameInput
|
<NameInput
|
||||||
placeholder="请输入路径名称"
|
placeholder="请输入路径名称"
|
||||||
v-model:value="pathName"
|
v-model:value="pathName"
|
||||||
@@ -370,7 +352,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
@click="showLearnBgMore"
|
@click="showLearnBgMore"
|
||||||
v-if="imgData.length > 5"
|
v-if="imgData.length > 3"
|
||||||
class="learnBgItem learnBgMore"
|
class="learnBgItem learnBgMore"
|
||||||
>
|
>
|
||||||
查看更多 <img src="../../assets/images/projectadd/go.png" />
|
查看更多 <img src="../../assets/images/projectadd/go.png" />
|
||||||
@@ -386,7 +368,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="btn">
|
<div class="btn">
|
||||||
<button class="samtn btn1" @click="handleOut1">取消</button>
|
<button class="samtn btn1" @click="handleOut1">取消</button>
|
||||||
<button class="samtn btn2" @click="editLearnPath">确定</button>
|
<a-button class="samtn btn2" @click="editLearnPath" :loading="confirmLoading">确定</a-button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -738,7 +720,9 @@ export default {
|
|||||||
setup() {
|
setup() {
|
||||||
const store = useStore();
|
const store = useStore();
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
|
const userInfo = computed(()=>store.state.userInfo)
|
||||||
const state = reactive({
|
const state = reactive({
|
||||||
|
confirmLoading:false,
|
||||||
tableLoading: false,
|
tableLoading: false,
|
||||||
out: false,
|
out: false,
|
||||||
out1: false,
|
out1: false,
|
||||||
@@ -866,17 +850,16 @@ export default {
|
|||||||
const handleOut = () => {
|
const handleOut = () => {
|
||||||
console.log(store.state);
|
console.log(store.state);
|
||||||
// console.log("打开创建路径弹窗");
|
// console.log("打开创建路径弹窗");
|
||||||
|
state.confirmLoading = false;
|
||||||
state.pathName = "";
|
state.pathName = "";
|
||||||
state.pathBg = "";
|
state.pathBg = "";
|
||||||
state.pathBgId = "";
|
state.pathBgId = "";
|
||||||
state.pathIntro = "";
|
state.pathIntro = "";
|
||||||
state.out = !state.out;
|
state.out = !state.out;
|
||||||
setTimeout(() => {
|
if (userInfo.value.departId && userInfo.value.departName) {
|
||||||
if (store.state.userInfo.departId && store.state.userInfo.departName) {
|
state.organizationSelectName =userInfo.value.departName;
|
||||||
state.organizationSelectName = store.state.userInfo.departName;
|
state.organizationSelectId = userInfo.value.departId;
|
||||||
state.organizationSelectId = store.state.userInfo.departId;
|
|
||||||
}
|
}
|
||||||
}, 2000);
|
|
||||||
};
|
};
|
||||||
const handleOut1 = () => {
|
const handleOut1 = () => {
|
||||||
state.pathName = "";
|
state.pathName = "";
|
||||||
@@ -1175,24 +1158,30 @@ export default {
|
|||||||
};
|
};
|
||||||
//创建学习路径图
|
//创建学习路径图
|
||||||
const createLearnPath = async () => {
|
const createLearnPath = async () => {
|
||||||
|
state.confirmLoading = true
|
||||||
if (!state.pathName) {
|
if (!state.pathName) {
|
||||||
message.destroy();
|
message.destroy();
|
||||||
|
state.confirmLoading = false
|
||||||
return message.warning("请输入路径图名称");
|
return message.warning("请输入路径图名称");
|
||||||
}
|
}
|
||||||
if (!state.organizationSelectName) {
|
if (!state.organizationSelectName) {
|
||||||
message.destroy();
|
message.destroy();
|
||||||
|
state.confirmLoading = false
|
||||||
return message.warning("请选择归属组织");
|
return message.warning("请选择归属组织");
|
||||||
}
|
}
|
||||||
if (!state.pathBg) {
|
if (!state.pathBg) {
|
||||||
message.destroy();
|
message.destroy();
|
||||||
|
state.confirmLoading = false
|
||||||
return message.warning("请选择背景图");
|
return message.warning("请选择背景图");
|
||||||
}
|
}
|
||||||
if (!state.mobilePicUrl) {
|
if (!state.mobilePicUrl) {
|
||||||
message.destroy();
|
message.destroy();
|
||||||
|
state.confirmLoading = false
|
||||||
return message.warning("未配置H5背景图,请联系管理员!");
|
return message.warning("未配置H5背景图,请联系管理员!");
|
||||||
}
|
}
|
||||||
if (!state.validate) {
|
if (!state.validate) {
|
||||||
message.destroy();
|
message.destroy();
|
||||||
|
state.confirmLoading = false
|
||||||
message.warning("路径图名称重复");
|
message.warning("路径图名称重复");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -1205,9 +1194,9 @@ export default {
|
|||||||
});
|
});
|
||||||
if (offName) {
|
if (offName) {
|
||||||
message.destroy();
|
message.destroy();
|
||||||
|
state.confirmLoading = false
|
||||||
return message.warning("项目名称重复,请重新填写");
|
return message.warning("项目名称重复,请重新填写");
|
||||||
}
|
}
|
||||||
state.lpLoading = true;
|
|
||||||
api.createLearnPath({
|
api.createLearnPath({
|
||||||
name: state.pathName,
|
name: state.pathName,
|
||||||
remark: state.pathIntro,
|
remark: state.pathIntro,
|
||||||
@@ -1218,8 +1207,8 @@ export default {
|
|||||||
mobilePicUrl: state.mobilePicUrl,
|
mobilePicUrl: state.mobilePicUrl,
|
||||||
}).then(id => {
|
}).then(id => {
|
||||||
message.destroy();
|
message.destroy();
|
||||||
|
state.confirmLoading = false
|
||||||
message.success("创建成功");
|
message.success("创建成功");
|
||||||
state.lpLoading = false;
|
|
||||||
router.push( {path: "/leveladd",query:{routerId: id.data.data }})
|
router.push( {path: "/leveladd",query:{routerId: id.data.data }})
|
||||||
})
|
})
|
||||||
};
|
};
|
||||||
@@ -1268,49 +1257,38 @@ export default {
|
|||||||
};
|
};
|
||||||
//删除学习路径图
|
//删除学习路径图
|
||||||
const deleteLearnPath = () => {
|
const deleteLearnPath = () => {
|
||||||
let obj = {
|
|
||||||
routerId: state.deletePathId,
|
|
||||||
type: -2,
|
|
||||||
};
|
|
||||||
api
|
|
||||||
.handleLearnPath(obj)
|
|
||||||
.then((res) => {
|
|
||||||
if (res.data.code === 200) {
|
|
||||||
console.log("删除成功", res);
|
|
||||||
message.destroy();
|
|
||||||
message.success("删除成功");
|
|
||||||
state.deleteModal = false;
|
state.deleteModal = false;
|
||||||
getLearnPath();
|
state.tableLoading = true;
|
||||||
}
|
message.success("删除成功");
|
||||||
if (res.data.code === -1) {
|
api.handleLearnPath({routerId: state.deletePathId, type: -2}).then(() => {getLearnPath()})
|
||||||
message.warning(res.data.msg);
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch((err) => {
|
|
||||||
console.log("删除失败", err);
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
//编辑学习路径图
|
//编辑学习路径图
|
||||||
const editLearnPath = async () => {
|
const editLearnPath = async () => {
|
||||||
|
state.confirmLoading = true
|
||||||
if (!state.pathName) {
|
if (!state.pathName) {
|
||||||
message.destroy();
|
message.destroy();
|
||||||
|
state.confirmLoading = false
|
||||||
return message.warning("请输入路径图名称");
|
return message.warning("请输入路径图名称");
|
||||||
}
|
}
|
||||||
if (!state.organizationSelectName) {
|
if (!state.organizationSelectName) {
|
||||||
message.destroy();
|
message.destroy();
|
||||||
|
state.confirmLoading = false
|
||||||
return message.warning("请选择归属组织");
|
return message.warning("请选择归属组织");
|
||||||
}
|
}
|
||||||
if (!state.pathBgId) {
|
if (!state.pathBgId) {
|
||||||
message.destroy();
|
message.destroy();
|
||||||
|
state.confirmLoading = false
|
||||||
return message.warning("请选择背景图");
|
return message.warning("请选择背景图");
|
||||||
}
|
}
|
||||||
if (!state.mobilePicUrl) {
|
if (!state.mobilePicUrl) {
|
||||||
message.destroy();
|
message.destroy();
|
||||||
|
state.confirmLoading = false
|
||||||
return message.warning("未配置H5背景图,请联系管理员!");
|
return message.warning("未配置H5背景图,请联系管理员!");
|
||||||
}
|
}
|
||||||
if (!state.validate) {
|
if (!state.validate) {
|
||||||
message.destroy();
|
message.destroy();
|
||||||
|
state.confirmLoading = false
|
||||||
return message.warning("路径图名称重复");
|
return message.warning("路径图名称重复");
|
||||||
}
|
}
|
||||||
// state.pathName = detail.name;
|
// state.pathName = detail.name;
|
||||||
@@ -1330,10 +1308,15 @@ export default {
|
|||||||
});
|
});
|
||||||
if (offName) {
|
if (offName) {
|
||||||
message.destroy();
|
message.destroy();
|
||||||
|
state.confirmLoading = false
|
||||||
return message.warning("项目名称重复,请重新填写");
|
return message.warning("项目名称重复,请重新填写");
|
||||||
}
|
}
|
||||||
|
state.out1 = false;
|
||||||
|
state.confirmLoading = false
|
||||||
|
message.success("修改成功");
|
||||||
|
state.tableLoading = true;
|
||||||
let obj = {
|
let obj = {
|
||||||
routerId: state.editPathId,
|
id: state.editPathId,
|
||||||
name: state.pathName,
|
name: state.pathName,
|
||||||
picUrl: state.pathBg,
|
picUrl: state.pathBg,
|
||||||
mobilePicUrl: state.mobilePicUrl,
|
mobilePicUrl: state.mobilePicUrl,
|
||||||
@@ -1342,40 +1325,10 @@ export default {
|
|||||||
organizationId: state.organizationSelectId,
|
organizationId: state.organizationSelectId,
|
||||||
status: 0,
|
status: 0,
|
||||||
};
|
};
|
||||||
api
|
api.createLearnPath(obj).then(() => {getLearnPath()})
|
||||||
.createLearnPath(obj)
|
|
||||||
.then((res) => {
|
|
||||||
if (res.data.code === 200) {
|
|
||||||
console.log("修改成功", res);
|
|
||||||
message.destroy();
|
|
||||||
message.success("修改成功");
|
|
||||||
// state.createLoading = false;
|
|
||||||
// state.currentPage = 1;
|
|
||||||
state.out1 = false;
|
|
||||||
// router.push("/leveladd");
|
|
||||||
getLearnPath();
|
|
||||||
// setTimeout(() => {
|
|
||||||
// console.log("修改成功", res);
|
|
||||||
// message.success("修改成功");
|
|
||||||
// // state.createLoading = false;
|
|
||||||
// // state.currentPage = 1;
|
|
||||||
// state.out1 = false;
|
|
||||||
// // router.push("/leveladd");
|
|
||||||
// getLearnPath();
|
|
||||||
// }, 1000);
|
|
||||||
}
|
|
||||||
if (res.data.code === -1) {
|
|
||||||
message.warning(res.data.msg);
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch((err) => {
|
|
||||||
console.log("修改失败", err);
|
|
||||||
// state.createLoading = false;
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
//选择状态
|
//选择状态
|
||||||
const selectStatusClassify = (e, v) => {
|
const selectStatusClassify = (e, v) => {
|
||||||
// console.log("eee", e, v);
|
|
||||||
state.statusValue = e;
|
state.statusValue = e;
|
||||||
state.statusClassify = v.classify;
|
state.statusClassify = v.classify;
|
||||||
};
|
};
|
||||||
@@ -1523,13 +1476,12 @@ export default {
|
|||||||
state.organizationSelectId = detail.organizationId;
|
state.organizationSelectId = detail.organizationId;
|
||||||
state.pathIntro = detail.remark;
|
state.pathIntro = detail.remark;
|
||||||
state.editPathId = id;
|
state.editPathId = id;
|
||||||
let arr = imgData.value;
|
const imgDict = imgData.value.find((img)=>img.value.split(',')[0] === state.pathBg)
|
||||||
arr.forEach((item) => {
|
if(imgDict){
|
||||||
if (item.value === state.pathBg) {
|
state.pathBgId = imgDict.code;
|
||||||
state.pathBgId = item.code;
|
state.pathBg = imgDict.value.split(',')[0];
|
||||||
|
state.mobilePicUrl = imgDict.value.split(',')[1];
|
||||||
}
|
}
|
||||||
});
|
|
||||||
|
|
||||||
//for (let i = 0; i < arr.length; i++) {
|
//for (let i = 0; i < arr.length; i++) {
|
||||||
// console.log("arr[i].dictValue", arr[i].dictValue, state.pathBg);
|
// console.log("arr[i].dictValue", arr[i].dictValue, state.pathBg);
|
||||||
|
|||||||
@@ -144,8 +144,8 @@
|
|||||||
<div>
|
<div>
|
||||||
<span class="nub1" style="color: #5dc988">{{
|
<span class="nub1" style="color: #5dc988">{{
|
||||||
routerInfoOverview.onlineCourseCnt
|
routerInfoOverview.onlineCourseCnt
|
||||||
}}</span
|
}}</span>
|
||||||
><span style="color: #5dc988; font-size: 14px">%</span>
|
<!-- <span style="color: #5dc988; font-size: 14px"></span> -->
|
||||||
</div>
|
</div>
|
||||||
<div class="nub2">在线课程数</div>
|
<div class="nub2">在线课程数</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -153,8 +153,8 @@
|
|||||||
<div>
|
<div>
|
||||||
<span class="nub1" style="color: #ff90ae">{{
|
<span class="nub1" style="color: #ff90ae">{{
|
||||||
routerInfoOverview.offLineCourseCnt
|
routerInfoOverview.offLineCourseCnt
|
||||||
}}</span
|
}}</span>
|
||||||
><span style="color: #ff90ae; font-size: 14px">%</span>
|
<!-- <span style="color: #ff90ae; font-size: 14px">%</span> -->
|
||||||
</div>
|
</div>
|
||||||
<div class="nub2">面授课程数</div>
|
<div class="nub2">面授课程数</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -325,16 +325,9 @@
|
|||||||
<div style="flex: 1">
|
<div style="flex: 1">
|
||||||
<div class="onerow">
|
<div class="onerow">
|
||||||
<div class="taskmain">任务大纲</div>
|
<div class="taskmain">任务大纲</div>
|
||||||
|
<ImpoterGroupLeader title="批量面授报名" :data="{targetId:routerId,type:2}" :url="`/admin/offcourse/importCourse`" :template-url="`/admin/router/exportTaskCoursePlan/${routerId}?type=1&taskType=2&thirdType=3`">
|
||||||
<div
|
<button class="btn">批量面授报名</button>
|
||||||
@click="showFaceStuSignUp"
|
</ImpoterGroupLeader>
|
||||||
class="editright"
|
|
||||||
style="margin-right: 130px; cursor: pointer"
|
|
||||||
>
|
|
||||||
<span class="editextb" style="margin-left: 0px"
|
|
||||||
>批量面授报名</span
|
|
||||||
>
|
|
||||||
</div>
|
|
||||||
<router-link
|
<router-link
|
||||||
:to="{ path: '/leveladddetail', query: { routerId: routerId } }"
|
:to="{ path: '/leveladddetail', query: { routerId: routerId } }"
|
||||||
class="editright"
|
class="editright"
|
||||||
@@ -1394,7 +1387,7 @@ import RouterHomeworkManage from "../../components/drawers/router/RouterHomework
|
|||||||
import RouterCommonManage from "../../components/drawers/router/RouterCommonManage";
|
import RouterCommonManage from "../../components/drawers/router/RouterCommonManage";
|
||||||
import RouterVoteManage from "../../components/drawers/router/RouterVoteManage";
|
import RouterVoteManage from "../../components/drawers/router/RouterVoteManage";
|
||||||
import RouterProjectManage from "../../components/drawers/router/RouterProjectManage";
|
import RouterProjectManage from "../../components/drawers/router/RouterProjectManage";
|
||||||
|
import ImpoterGroupLeader from "@/components/drawers/project/ImpoterGroupLeader.vue";
|
||||||
import TaskImpStu from "../../components/drawers/TaskFaceIn";
|
import TaskImpStu from "../../components/drawers/TaskFaceIn";
|
||||||
|
|
||||||
import { checkPer } from "@/utils/utils";
|
import { checkPer } from "@/utils/utils";
|
||||||
@@ -1402,7 +1395,7 @@ import { checkPer } from "@/utils/utils";
|
|||||||
export default {
|
export default {
|
||||||
name: "LevelAdd",
|
name: "LevelAdd",
|
||||||
components: {
|
components: {
|
||||||
// PathAddStu,
|
ImpoterGroupLeader,
|
||||||
ProjCheckShip,
|
ProjCheckShip,
|
||||||
ImpStu,
|
ImpStu,
|
||||||
CheckStu,
|
CheckStu,
|
||||||
@@ -2243,6 +2236,7 @@ export default {
|
|||||||
levelList.routerInfoOverview[item] =
|
levelList.routerInfoOverview[item] =
|
||||||
res.data.data.routerInfoOverview[item] || 0;
|
res.data.data.routerInfoOverview[item] || 0;
|
||||||
});
|
});
|
||||||
|
console.log("学习路径图概览数据获取1", levelList);
|
||||||
Object.keys(res.data.data.chapterOverviewList).forEach((item) => {
|
Object.keys(res.data.data.chapterOverviewList).forEach((item) => {
|
||||||
levelList.chapterOverviewList[item] =
|
levelList.chapterOverviewList[item] =
|
||||||
res.data.data.chapterOverviewList[item] || 0;
|
res.data.data.chapterOverviewList[item] || 0;
|
||||||
|
|||||||
@@ -528,7 +528,7 @@ const deleteChapter = () => {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
routerInfo.value.chapterList.splice(activeIndex.value, 1);
|
routerInfo.value.chapterList.splice(activeIndex.value, 1);
|
||||||
activeIndex.value = activeIndex.value-1;
|
activeIndex.value && (activeIndex.value = activeIndex.value-1);
|
||||||
deleteChapterModal.value = false;
|
deleteChapterModal.value = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<!---- 创建项目页面 --->
|
<!---- 创建项目页面 --->
|
||||||
<template>
|
<template xmlns:display="http://www.w3.org/1999/xhtml">
|
||||||
<div class="projectAdd">
|
<div class="projectAdd">
|
||||||
<div class="header">
|
<div class="header">
|
||||||
<span class="title"
|
<span class="title"
|
||||||
@@ -73,6 +73,9 @@
|
|||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
"
|
"
|
||||||
v-for="(src, index) in projectPic"
|
v-for="(src, index) in projectPic"
|
||||||
|
:style="{
|
||||||
|
display: index >= 3 ? 'none' : 'flex',
|
||||||
|
}"
|
||||||
:key="index"
|
:key="index"
|
||||||
@click="() => (projectInfo.picUrl = src.value)"
|
@click="() => (projectInfo.picUrl = src.value)"
|
||||||
>
|
>
|
||||||
@@ -87,6 +90,29 @@
|
|||||||
alt="avatar"
|
alt="avatar"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
<div
|
||||||
|
@click="showLearnBgMore"
|
||||||
|
v-if="projectPic.length > 3"
|
||||||
|
style="
|
||||||
|
width: 100px;
|
||||||
|
height: 100px;
|
||||||
|
padding-left: 15px;
|
||||||
|
border-radius: 5px;
|
||||||
|
cursor: pointer;
|
||||||
|
position: relative;
|
||||||
|
overflow: hidden;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
border: 1px solid #c7cbd2;
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #4ea6ff;
|
||||||
|
line-height: 36px;
|
||||||
|
"
|
||||||
|
>
|
||||||
|
查看更多 <img src="../../assets/images/projectadd/go.png" alt=""/>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="name">
|
<div class="name">
|
||||||
@@ -283,6 +309,36 @@
|
|||||||
</a-button>
|
</a-button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<!-- 更多背景图 v-model:visible="learnBgMore" -->
|
||||||
|
<a-modal
|
||||||
|
:closable="sh"
|
||||||
|
centered="true"
|
||||||
|
v-model:visible="learnBgMore"
|
||||||
|
:footer="null"
|
||||||
|
:width="650"
|
||||||
|
wrapClassName="learnBgMoreModal"
|
||||||
|
:z-index="9999"
|
||||||
|
>
|
||||||
|
<div class="main">
|
||||||
|
<div class="top">
|
||||||
|
<div class="topc">封面图</div>
|
||||||
|
</div>
|
||||||
|
<div class="imagesBox">
|
||||||
|
<div
|
||||||
|
@click="() => (projectInfo.picUrl = src.value)"
|
||||||
|
v-for="item in projectPic"
|
||||||
|
:key="item.code"
|
||||||
|
class="learnBgItem"
|
||||||
|
>
|
||||||
|
<!-- <img class="im" :src="item.source" /> -->
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="btn">
|
||||||
|
<button class="samtn btn1" @click="closeLearnBgMore">取消</button>
|
||||||
|
<button class="samtn btn2" @click="closeLearnBgMore">确定</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</a-modal>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
@@ -336,10 +392,10 @@ export default {
|
|||||||
ptojectType: "",
|
ptojectType: "",
|
||||||
changeCondition: false,
|
changeCondition: false,
|
||||||
clickNum: 0,
|
clickNum: 0,
|
||||||
timeRange: []
|
timeRange: [],
|
||||||
|
learnBgMore: false
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
// 封面图选择
|
// 封面图选择
|
||||||
const handleChangeSelect = (value) => {
|
const handleChangeSelect = (value) => {
|
||||||
console.log(value);
|
console.log(value);
|
||||||
@@ -534,9 +590,23 @@ export default {
|
|||||||
return current && current < dayjs().subtract(1, 'days').endOf('day')
|
return current && current < dayjs().subtract(1, 'days').endOf('day')
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//显示更多路径背景弹窗
|
||||||
|
const showLearnBgMore = () => {
|
||||||
|
state.learnBgMore = true;
|
||||||
|
};
|
||||||
|
//关闭更多路径背景弹窗
|
||||||
|
const closeLearnBgMore = () => {
|
||||||
|
state.learnBgMore = false;
|
||||||
|
};
|
||||||
function calendarChange(date, dateStr, partial) {
|
function calendarChange(date, dateStr, partial) {
|
||||||
state.datePartial = partial
|
state.datePartial = partial
|
||||||
}
|
}
|
||||||
|
const chooseImg2 = (item) => {
|
||||||
|
// console.log(item);
|
||||||
|
state.pathBgId = item.code;
|
||||||
|
state.pathBg = item.value.split(',')[0];
|
||||||
|
state.mobilePicUrl = item.value.split(',')[1];
|
||||||
|
};
|
||||||
|
|
||||||
return {
|
return {
|
||||||
...toRefs(state),
|
...toRefs(state),
|
||||||
@@ -550,6 +620,9 @@ export default {
|
|||||||
backPage,
|
backPage,
|
||||||
templateScroll,
|
templateScroll,
|
||||||
handleChangeSelect,
|
handleChangeSelect,
|
||||||
|
showLearnBgMore,
|
||||||
|
closeLearnBgMore,
|
||||||
|
chooseImg2
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
@@ -729,6 +802,33 @@ export default {
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
// height: 40px;
|
// height: 40px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.btn {
|
||||||
|
width: 33%;
|
||||||
|
margin-top: 30px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
margin-bottom: 30px;
|
||||||
|
|
||||||
|
.samtn {
|
||||||
|
width: 100px;
|
||||||
|
height: 40px;
|
||||||
|
font-size: 14px;
|
||||||
|
border: 1px solid #4ea6ff;
|
||||||
|
border-radius: 8px;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn1 {
|
||||||
|
background-color: #fff;
|
||||||
|
color: #4ea6ff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn2 {
|
||||||
|
background-color: #4ea6ff;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.filebox {
|
.filebox {
|
||||||
@@ -871,6 +971,106 @@ export default {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.learnBgMoreModal {
|
||||||
|
.ant-modal {
|
||||||
|
width: 680px !important;
|
||||||
|
height: 528px !important;
|
||||||
|
|
||||||
|
.ant-modal-content {
|
||||||
|
width: 680px !important;
|
||||||
|
height: 528px !important;
|
||||||
|
|
||||||
|
.ant-modal-body {
|
||||||
|
width: 680px !important;
|
||||||
|
height: 528px !important;
|
||||||
|
padding: 0 !important;
|
||||||
|
|
||||||
|
.main {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
|
||||||
|
.top {
|
||||||
|
padding-left: 51px;
|
||||||
|
padding-right: 51px;
|
||||||
|
padding-top: 28px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
cursor: pointer;
|
||||||
|
|
||||||
|
.topc {
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #000000;
|
||||||
|
line-height: 36px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.imagesBox {
|
||||||
|
display: flex;
|
||||||
|
// justify-content: space-between;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
padding-left: 51px;
|
||||||
|
padding-right: 39px;
|
||||||
|
margin-top: 20px;
|
||||||
|
height: 350px;
|
||||||
|
overflow-y: auto;
|
||||||
|
|
||||||
|
.learnBgItem {
|
||||||
|
border-radius: 8px;
|
||||||
|
width: 136px;
|
||||||
|
height: 106px;
|
||||||
|
background-size: 100%;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn {
|
||||||
|
width: 100%;
|
||||||
|
position: absolute;
|
||||||
|
bottom: 30px;
|
||||||
|
margin-top: 30px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
|
||||||
|
.samtn {
|
||||||
|
width: 100px;
|
||||||
|
height: 40px;
|
||||||
|
font-size: 14px;
|
||||||
|
border: 1px solid #4ea6ff;
|
||||||
|
border-radius: 8px;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn1 {
|
||||||
|
background-color: #fff;
|
||||||
|
color: #4ea6ff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn2 {
|
||||||
|
background-color: #4ea6ff;
|
||||||
|
color: #fff;
|
||||||
|
margin-left: 16px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn1 {
|
||||||
|
background-color: #fff;
|
||||||
|
color: #4ea6ff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn2 {
|
||||||
|
background-color: #4ea6ff;
|
||||||
|
color: #fff;
|
||||||
|
margin-left: 16px;
|
||||||
|
}
|
||||||
.treeDropdown {
|
.treeDropdown {
|
||||||
// width: 240px !important;
|
// width: 240px !important;
|
||||||
// border-radius: 5px;
|
// border-radius: 5px;
|
||||||
|
|||||||
@@ -169,14 +169,14 @@
|
|||||||
<DropDown v-if="checkPer(record.permissions)" value="授权">
|
<DropDown v-if="checkPer(record.permissions)" value="授权">
|
||||||
<OwnerTableModelStudent
|
<OwnerTableModelStudent
|
||||||
:types="[4, 5, 6]"
|
:types="[4, 5, 6]"
|
||||||
:id="record.projectId"
|
:id="record.id"
|
||||||
:type="6"
|
:type="6"
|
||||||
>权限名单</OwnerTableModelStudent
|
>权限名单</OwnerTableModelStudent
|
||||||
>
|
>
|
||||||
<CommonStudent :type="4" :id="record.projectId" title="查看权"
|
<CommonStudent :type="4" :id="record.id" title="查看权"
|
||||||
>查看权</CommonStudent
|
>查看权</CommonStudent
|
||||||
>
|
>
|
||||||
<CommonStudent :type="5" :id="record.projectId" title="管理权"
|
<CommonStudent :type="5" :id="record.id" title="管理权"
|
||||||
>管理权</CommonStudent
|
>管理权</CommonStudent
|
||||||
>
|
>
|
||||||
</DropDown>
|
</DropDown>
|
||||||
@@ -205,7 +205,7 @@
|
|||||||
>
|
>
|
||||||
<a-button
|
<a-button
|
||||||
v-if="record.status !== -1 && record.type === 3"
|
v-if="record.status !== -1 && record.type === 3"
|
||||||
@click="showBackFinashModal(record.projectId)"
|
@click="showBackFinashModal(record.id)"
|
||||||
type="link"
|
type="link"
|
||||||
>撤回</a-button
|
>撤回</a-button
|
||||||
>
|
>
|
||||||
@@ -1478,15 +1478,15 @@ export default {
|
|||||||
customRender: (value) => {
|
customRender: (value) => {
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
{value.record.type === 3
|
{value.record.status === 3
|
||||||
? {
|
? {
|
||||||
0: "未审核",
|
0: "草稿",
|
||||||
1: "审核中",
|
1: "提交待审核",
|
||||||
2: "已审核",
|
2: "审核通过",
|
||||||
3: "已审核",
|
3: "已经发布",
|
||||||
4: "已审核",
|
4: "发布",
|
||||||
"-1": "已审核",
|
"-1": "已结束",
|
||||||
"-5": "拒绝",
|
"-6": "撤回已结束",
|
||||||
}[value.record.status + ""] || ""
|
}[value.record.status + ""] || ""
|
||||||
: "-"}
|
: "-"}
|
||||||
</div>
|
</div>
|
||||||
@@ -1668,7 +1668,7 @@ export default {
|
|||||||
function manage(record) {
|
function manage(record) {
|
||||||
router.push({
|
router.push({
|
||||||
path: "/taskpage",
|
path: "/taskpage",
|
||||||
query: { projectId: record.projectId },
|
query: { projectId: record.id },
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -250,19 +250,19 @@
|
|||||||
">
|
">
|
||||||
<div class="opa">
|
<div class="opa">
|
||||||
<div class="opacation">
|
<div class="opacation">
|
||||||
<span v-if="element.type !== 5" style="
|
<span style="
|
||||||
color: #4ea6ff;
|
color: #4ea6ff;
|
||||||
margin-right: 25px;
|
margin-right: 25px;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
" @click="editTaskForType(element,index)">
|
" @click="editTaskForType(element,index)">
|
||||||
编辑
|
编辑
|
||||||
</span>
|
</span>
|
||||||
<span v-else style="
|
<!--<span v-else style="-->
|
||||||
color: #4ea6ff;
|
<!--color: #4ea6ff;-->
|
||||||
margin-right: 55px;
|
<!--margin-right: 55px;-->
|
||||||
cursor: pointer;
|
<!--cursor: pointer;-->
|
||||||
">
|
<!--">-->
|
||||||
</span>
|
<!--</span>-->
|
||||||
<span style="color: #4ea6ff; cursor: pointer" @click="showDelete(index)">
|
<span style="color: #4ea6ff; cursor: pointer" @click="showDelete(index)">
|
||||||
删除
|
删除
|
||||||
</span>
|
</span>
|
||||||
@@ -668,7 +668,7 @@ const deleteStage = () => {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
projectInfo.value.stageList.splice(activeIndex.value, 1);
|
projectInfo.value.stageList.splice(activeIndex.value, 1);
|
||||||
activeIndex.value = activeIndex.value-1;
|
activeIndex.value && (activeIndex.value = activeIndex.value-1);
|
||||||
deleteStageModal.value = false;
|
deleteStageModal.value = false;
|
||||||
};
|
};
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
|
|||||||
@@ -291,8 +291,8 @@
|
|||||||
<div>
|
<div>
|
||||||
<span class="nub1" style="color: #5dc988">{{
|
<span class="nub1" style="color: #5dc988">{{
|
||||||
projectInfoOverview.onlineCourseCnt
|
projectInfoOverview.onlineCourseCnt
|
||||||
}}</span
|
}}</span>
|
||||||
><span style="color: #5dc988; font-size: 14px">%</span>
|
<!-- <span style="color: #5dc988; font-size: 14px">%</span> -->
|
||||||
</div>
|
</div>
|
||||||
<div class="nub2">在线课程数</div>
|
<div class="nub2">在线课程数</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -300,8 +300,8 @@
|
|||||||
<div>
|
<div>
|
||||||
<span class="nub1" style="color: #ff90ae">{{
|
<span class="nub1" style="color: #ff90ae">{{
|
||||||
projectInfoOverview.offLineCourseCnt
|
projectInfoOverview.offLineCourseCnt
|
||||||
}}</span
|
}}</span>
|
||||||
><span style="color: #ff90ae; font-size: 14px">%</span>
|
<!-- <span style="color: #ff90ae; font-size: 14px">%</span> -->
|
||||||
</div>
|
</div>
|
||||||
<div class="nub2">面授课程数</div>
|
<div class="nub2">面授课程数</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -416,9 +416,9 @@
|
|||||||
<div class="split"></div>
|
<div class="split"></div>
|
||||||
<div class="onerow">
|
<div class="onerow">
|
||||||
<div class="taskmain">任务大纲</div>
|
<div class="taskmain">任务大纲</div>
|
||||||
<!-- 2022-11-30注释 后面放开 -->
|
<ImpoterGroupLeader title="批量面授报名" :data="{targetId:projectId,type:1}" :url="`/admin/offcourse/importCourse`" :template-url="`/admin/project/exportTaskCoursePlan/${projectId}?type=1&taskType=2&thirdType=3`">
|
||||||
<!-- <button class="btn" @click="showFaceIn" v-if="morFaceT"> -->
|
<button class="btn">批量面授报名</button>
|
||||||
<button class="btn" @click="showFaceIn">批量面授报名</button>
|
</ImpoterGroupLeader>
|
||||||
<router-link
|
<router-link
|
||||||
v-if="checkPer(permissions)"
|
v-if="checkPer(permissions)"
|
||||||
:to="{ path: `/taskadd`, query: { projectId: projectId } }"
|
:to="{ path: `/taskadd`, query: { projectId: projectId } }"
|
||||||
@@ -758,7 +758,7 @@
|
|||||||
<div class="btn2" @click="exportGroup">
|
<div class="btn2" @click="exportGroup">
|
||||||
<span class="btn2text">导出小组</span>
|
<span class="btn2text">导出小组</span>
|
||||||
</div>
|
</div>
|
||||||
<ImpoterGroupLeader :url="`/admin/studentGroup/importGroup`" :template-url="`/admin/studentGroup/exportGroup/${projectId}`">
|
<ImpoterGroupLeader :data="{targetId:projectId,type:1}" :url="`/admin/studentGroup/importGroup`" :template-url="`/admin/studentGroup/exportGroup/${projectId}`">
|
||||||
<div class="btn2">
|
<div class="btn2">
|
||||||
<span class="btn2text">导入小组长</span>
|
<span class="btn2text">导入小组长</span>
|
||||||
</div>
|
</div>
|
||||||
@@ -1544,8 +1544,6 @@
|
|||||||
types="2"
|
types="2"
|
||||||
classify="2"
|
classify="2"
|
||||||
/>
|
/>
|
||||||
<!-- 批量面授报名 -->
|
|
||||||
<task-imp-stu v-model:TaskFaceImpStuvisible="TaskFaceImpStuvisible" />
|
|
||||||
<!-- 概览(无数据)-项目发布弹窗 -->
|
<!-- 概览(无数据)-项目发布弹窗 -->
|
||||||
<div>
|
<div>
|
||||||
<a-modal
|
<a-modal
|
||||||
@@ -2135,7 +2133,6 @@ import SeeStu from "../../components/drawers/SeeStu";
|
|||||||
import ChangeGroup from "../../components/drawers/ChangeGroup";
|
import ChangeGroup from "../../components/drawers/ChangeGroup";
|
||||||
import NoticePub from "../../components/drawers/NoticePub";
|
import NoticePub from "../../components/drawers/NoticePub";
|
||||||
import NoticeHis from "../../components/drawers/NoticeHis";
|
import NoticeHis from "../../components/drawers/NoticeHis";
|
||||||
import TaskImpStu from "../../components/drawers/TaskFaceIn";
|
|
||||||
import { storage } from "../../api/storage";
|
import { storage } from "../../api/storage";
|
||||||
import * as api from "../../api/index1";
|
import * as api from "../../api/index1";
|
||||||
import * as apis from "../../api/index";
|
import * as apis from "../../api/index";
|
||||||
@@ -2191,7 +2188,6 @@ export default {
|
|||||||
ChangeGroup,
|
ChangeGroup,
|
||||||
NoticePub,
|
NoticePub,
|
||||||
ProjectScore,
|
ProjectScore,
|
||||||
TaskImpStu,
|
|
||||||
projSet,
|
projSet,
|
||||||
NoticeHis,
|
NoticeHis,
|
||||||
TwoDimensionalCode,
|
TwoDimensionalCode,
|
||||||
|
|||||||
Reference in New Issue
Block a user