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