Merge remote-tracking branch 'origin/develop' into develop

# Conflicts:
#	src/views/projectcenter/TaskAdd.vue
This commit is contained in:
yuping
2023-02-25 19:41:57 +08:00
19 changed files with 327 additions and 138 deletions

View File

@@ -222,6 +222,8 @@ export const updateStuCert = (obj) => http.post('/admin/certificate/updateStuCer
//添加外部考试
export const createExamination = (obj) => http.post('/examination/createExamination', obj)
//催促考试
export const batchSendMessage = (obj) => http.post('/admin/taskmanage/batchSendMessage', obj)
// 外部考试导入成绩
export const ImportExternalExamScore = (obj) => http.post('/admin/external/exam/manage/importExternalExamScore', obj, { headers: { "Content-Type": "multipart/form-data" } })
//分组

View File

@@ -71,7 +71,7 @@
</div>
<div class="btn btn1" @click="exportTaskStu">
<div class="img2"></div>
<div class="wz">导出数据</div>
<div class="wz">导出数据1</div>
</div>
</div>
<!-- <div class="line">
@@ -858,10 +858,11 @@ export default {
// 导出数据
function exportTaskStu() {
debugger
{/* debugger */ }
console.log("props.datasource此处的taskId 应该是router_task 表中主键", props.datasource);
console.log("props.datasource", props.datasource);
if (props.types == 1) {
if (props.types == 2) {
window.open(
`${process.env.VUE_APP_BASE_API
}/admin/student/exportTaskStudent?currentStageId=${props.datasource.chapterId

View File

@@ -3,20 +3,20 @@
<slot></slot>
</div>
<a-drawer
:visible="visible"
class="drawerStyle addcaseDrawer"
width="1000"
title="添加案例"
placement="right"
:visible="visible"
class="drawerStyle addcaseDrawer"
width="1000"
title="添加案例"
placement="right"
>
<div class="drawerMain">
<div class="header">
<div v-if="taskIndex>=0" class="headerTitle">编辑案例</div>
<div v-if="taskIndex >= 0" 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"
style="width: 29px; height: 29px; cursor: pointer"
src="../../assets/images/basicinfo/close.png"
@click="closeDrawer"
/>
</div>
<div class="contentMain">
@@ -26,16 +26,21 @@
<div class="ipt_name"></div>
<div class="fi_input">
<a-input
v-model:value="params.keyWord"
style="width: 200px; height: 40px; border-radius: 8px;margin-right:24px;"
placeholder="请输入案例标题"
v-model:value="params.keyWord"
style="
width: 200px;
height: 40px;
border-radius: 8px;
margin-right: 24px;
"
placeholder="请输入案例标题"
/>
</div>
<div class="fi_input">
<a-input
v-model:value="params.authorName"
style="width: 200px; height: 40px; border-radius: 8px"
placeholder="请输入作者名字"
v-model:value="params.authorName"
style="width: 200px; height: 40px; border-radius: 8px"
placeholder="请输入作者名字"
/>
</div>
</div>
@@ -51,18 +56,55 @@
</div>
</div>
</div>
<div
class="main_notice"
v-if="taskIndex >= 0"
style="
background-color: #e9f6fe;
height: 40px;
display: flex;
align-items: center;
"
>
<div class="mntc_left" v-if="selectedRows">
<div class="notice_icon"></div>
<div>
<div>
<span class="title"
>已选择
<span class="data" style="color: #4ea6ff">{{ 1 }}</span>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
>
<span class="title"
>案例标题
<span
class="data"
style="color: #4ea6ff; margin-right: 15px"
>{{
selectedRows?.name
? selectedRows?.name
: selectedRows?.title
}}</span
>
</span>
</div>
</div>
</div>
</div>
<div class="main_table">
<a-table
:customRow="customRow"
class="ant-table-striped"
:row-class-name="(_, index) => (index % 2 === 1 ? 'table-striped' : null)"
row-key="id"
:columns="columns"
:data-source="data"
:loading="loading"
:pagination="pagination"
:row-selection="rowSelection"
:customRow="customRow"
class="ant-table-striped"
:row-class-name="
(_, index) => (index % 2 === 1 ? 'table-striped' : null)
"
row-key="id"
:columns="columns"
:data-source="data"
:loading="loading"
:pagination="pagination"
:row-selection="rowSelection"
/>
</div>
</div>
@@ -74,17 +116,17 @@
</a-drawer>
</template>
<script setup>
import {computed, defineEmits, defineProps, ref, watch} from "vue";
import {useBoeApiPage} from "@/api/request";
import {CASE_PAGE} from "@/api/ThirdApi";
import {message} from "ant-design-vue";
import { computed, defineEmits, defineProps, ref, watch } from "vue";
import { useBoeApiPage } from "@/api/request";
import { CASE_PAGE } from "@/api/ThirdApi";
import { message } from "ant-design-vue";
const props = defineProps({
type: Number,
taskList: []
})
const visible = ref(false)
const emit = defineEmits({})
taskList: [],
});
const visible = ref(false);
const emit = defineEmits({});
const columns = ref([
{
@@ -101,40 +143,43 @@ const columns = ref([
width: "200px",
align: "center",
},
])
]);
const initParams = {
keyWord: '',
authorName: '',
keyWord: "",
authorName: "",
pageIndex: 1,
pageSize: 10,
orderAsc: true
}
const params = ref(initParams)
orderAsc: true,
};
const params = ref(initParams);
const rowSelectKeys = ref([]);
const selectsData = ref([]);
const taskIndex = ref(-1);
const {data, loading, total, fetch} = useBoeApiPage(CASE_PAGE, params.value, {
const { data, loading, total, fetch } = useBoeApiPage(CASE_PAGE, params.value, {
init: false,
result: res => res.result.list,
totalPage: res => res.result.totalPages,
total: res => res.result.count
})
result: (res) => res.result.list,
totalPage: (res) => res.result.totalPages,
total: (res) => res.result.count,
});
watch(taskIndex, () => {
if (taskIndex.value >= 0) {
rowSelectKeys.value = [props.taskList[taskIndex.value].courseId]
selectsData.value = data.value.find(t => t.id === props.taskList[taskIndex.value].courseId) || {}
rowSelectKeys.value = [props.taskList[taskIndex.value].courseId];
selectsData.value =
data.value.find(
(t) => t.id === props.taskList[taskIndex.value].courseId
) || {};
}
})
});
const customRow = (record) => ({
onClick: () => {
rowSelectKeys.value = [record.id]
selectsData.value = [record]
}
})
rowSelectKeys.value = [record.id];
selectsData.value = [record];
},
});
const pagination = computed(() => ({
total: total.value,
@@ -146,76 +191,82 @@ const pagination = computed(() => ({
const changePagination = (e) => {
params.value.pageIndex = e;
fetch()
fetch();
};
const rowSelection = computed(() => ({
type: 'radio',
type: "radio",
columnWidth: 20,
selectedRowKeys: rowSelectKeys.value,
onChange: onSelectChange,
preserveSelectedRowKeys: true,
getCheckboxProps: getCheckboxProps
getCheckboxProps: getCheckboxProps,
}));
const getCheckboxProps = () => ({
// 某几项默认禁止选中(R: 当state等于1时)
disabled: false
})
disabled: false,
});
function onSelectChange(e, l) {
rowSelectKeys.value = e;
selectsData.value = l;
selectedRows.value = l[0];
console.log("llllllllll", l);
console.log("selectedRows", selectedRows);
}
function search() {
params.value.pageIndex = 1
fetch()
params.value.pageIndex = 1;
fetch();
}
function reset() {
rowSelectKeys.value = [];
selectsData.value = [];
params.value.pageIndex = 1
params.value.keyWord = ''
params.value.authorName = ''
fetch()
params.value.pageIndex = 1;
params.value.keyWord = "";
params.value.authorName = "";
fetch();
}
const closeDrawer = () => {
visible.value = false
taskIndex.value = -1
reset()
visible.value = false;
taskIndex.value = -1;
selectedRows.value = null;
reset();
};
function confirm() {
if (!selectsData.value.length || !rowSelectKeys.value.length) {
message.warning("请选择案例");
return
return;
}
if (taskIndex.value === -1) {
const list = props.taskList
const list = props.taskList;
list.push({
name: selectsData.value[0].title,
type: props.type,
courseId: selectsData.value[0].id,
info: {...selectsData.value[0]}
})
info: { ...selectsData.value[0] },
});
} else {
const data = props.taskList[taskIndex.value]
data.name = selectsData.value[0].title
data.courseId = selectsData.value[0].id
data.info = selectsData.value[0]
const data = props.taskList[taskIndex.value];
data.name = selectsData.value[0].title;
data.courseId = selectsData.value[0].id;
data.info = selectsData.value[0];
}
emit('update:taskList', [...props.taskList])
closeDrawer()
emit("update:taskList", [...props.taskList]);
closeDrawer();
}
let selectedRows = ref(null);
function openDrawer(i, row) {
console.log("iiiiiiiii", i, row);
row && (rowSelectKeys.value = [row.info]);
row && (selectsData.value = [{title: row.name, id: row.courseId}]);
(i >= 0) && (taskIndex.value = i);
visible.value = true
row && (selectsData.value = [{ title: row.name, id: row.courseId }]);
i >= 0 && (taskIndex.value = i);
visible.value = true;
selectedRows.value = row;
}
defineExpose({openDrawer})
defineExpose({ openDrawer });
</script>
<style lang="scss">
.ant-table-striped :deep(.table-striped) td {
@@ -376,8 +427,8 @@ defineExpose({openDrawer})
}
.ant-table-tbody
> tr:hover:not(.ant-table-expanded-row):not(.ant-table-row-selected)
> td {
> tr:hover:not(.ant-table-expanded-row):not(.ant-table-row-selected)
> td {
background: #f6f9fd;
}
@@ -424,5 +475,31 @@ defineExpose({openDrawer})
}
}
}
.main_notice {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 3px;
height: 40px;
background-color: #e9f6fe;
.mntc_left {
display: flex;
align-items: center;
.notice_icon {
width: 14px;
height: 14px;
margin-right: 9px;
margin-left: 9px;
background-image: url(@/assets/images/coursewareManage/gan.png);
background-size: 100% 100%;
}
}
.mntc_right {
cursor: pointer;
}
}
}
</style>

View File

@@ -76,7 +76,11 @@
<button class="xkbtn" @click="goProjectmanage">新建项目</button>
</div>
<div class="main_notice" v-if="taskIndex >= 0">
<div
class="main_notice"
v-if="taskIndex >= 0"
style="background-color: #e9f6fe; height: 40px"
>
<div class="mntc_left" v-if="selectedRows">
<div class="notice_icon"></div>
<div>
@@ -204,13 +208,22 @@ const columns = ref([
width: "20%",
ellipsis: true,
customRender: ({ record: { gaName, faName, name } }) => (
<div title={faName ? gaName !== null ? gaName + "/" + faName : faName : name}>
{
faName ? gaName !== null
? (gaName + "/" + faName).length > 16 ? (gaName + "/" + faName).slice(0, 16) + '...' : (gaName + "/" + faName)
: faName.length > 16 ? faName.slice(0, 16) + '...' : faName
: name.length > 16 ? name.slice(0, 16) + '...' : name
<div
title={
faName ? (gaName !== null ? gaName + "/" + faName : faName) : name
}
>
{faName
? gaName !== null
? (gaName + "/" + faName).length > 16
? (gaName + "/" + faName).slice(0, 16) + "..."
: gaName + "/" + faName
: faName.length > 16
? faName.slice(0, 16) + "..."
: faName
: name.length > 16
? name.slice(0, 16) + "..."
: name}
</div>
),
},
@@ -257,7 +270,7 @@ const { data, loading, total, fetch } = useRowsPage(
total: (res) => res.result.count,
}
);
console.log(data)
console.log(data);
watch(taskIndex, () => {
// if (taskIndex.value >= 0) {
// rowSelectKeys.value = [props.taskList[taskIndex.value].courseId]

View File

@@ -64,7 +64,7 @@
style="margin-right: 10px"
src="../../assets/images/courseManage/add0.png"
/></template>
添加组员1
添加组员
</a-button></CommonStudent
>
<div class="btn btn2" @click="showModal">
@@ -72,7 +72,7 @@
<div class="wz">批量删除</div>
</div>
<!-- 2022-11-30注释 后面放开 -->
<div class="btn btn2">
<div class="btn btn2" @click="exportGroupMember">
<div class="img2"></div>
<div class="wz">导出组员</div>
</div>
@@ -541,6 +541,15 @@ export default {
// });
}
);
// 导出数据
function exportGroupMember() {
console.log("props.datasource", props);
window.open(
`${process.env.VUE_APP_BASE_API}/admin/studentGroup/exportGroupMember/${props.projectId}/${props.chooseGroupId}`
);
}
function submitCall(flag) {
flag && getStu();
}
@@ -563,6 +572,7 @@ export default {
closedeleone,
yesdele,
submitCall,
exportGroupMember
};
},
};

View File

@@ -304,7 +304,7 @@ export default {
faceclassScene: [],
projectInfo: {},
tableDataTotal: 20,
tableDataTotal: 2,
pageSize: 10,
currentPage: 1,
tableData: [],

View File

@@ -13,7 +13,7 @@
placeholder="请输入姓名"
/>
</div>
<div class="groupright">
<div class="groupright" style="margin-left: 16px;">
<div class="btn1" @click="searchStu">
<img src="../../assets/images/courseManage/search0.png" />
<span class="btn1text">搜索</span>
@@ -75,7 +75,7 @@
<div class="groupname">姓名</div>
<a-input
class="ant-input"
style="width: 152px"
style="width: 152px;"
v-model:value="searchRankName"
placeholder="请输入姓名"
/>

View File

@@ -109,8 +109,8 @@ export default {
},
{
title: "类型",
dataIndex: "type",
key: "type",
dataIndex: "typeDesc",
key: "typeDesc",
width: 60,
align: "center",
className: "h",

View File

@@ -19,12 +19,12 @@
</div>
<div class="main">
<div class="minatitl">
<div class="up1">请下载</div>
<div class="up2" @click="downTemplate" style="cursor: pointer">
模板
</div>
<div class="up1">按要求填写数据并导入</div>
<div class="up1" style="font-weight: bolder">导入小组长</div>
<!--<div class="up2" @click="downTemplate" style="cursor: pointer">-->
<!--模板-->
<!--</div>-->
</div>
<div class="up1">请先导出小组填写小组长按要求填写数据并导入</div>
<div class="upload">
<div class="text">上传</div>
<div class="right">
@@ -130,10 +130,10 @@ const closeDrawer = () => {
function openDrawer() {
visible.value = true
}
function downTemplate() {
window.open(process.env.VUE_APP_BASE_API + props.templateUrl);
}
//
// function downTemplate() {
// window.open(process.env.VUE_APP_BASE_API + props.templateUrl);
// }
function downloadErrorData(url) {
window.open(process.env.VUE_APP_FILE_PATH + url)

View File

@@ -56,11 +56,11 @@
</div>
</div>
<div class="btnss" style="margin-top: 20px">
<!--
<div class="btn btn1" @click="godie" style="margin-right: 20px">
<div class="img1"></div>
<div class="wz">催促考试</div>
</div>-->
</div>
<div class="btn btn2" @click="exportData">
<div class="img2"></div>
<div class="wz">导出数据</div>
@@ -126,6 +126,7 @@ import { message } from "ant-design-vue";
import EScore from "../ExportScore.vue";
import CheckAnsware from '../CheckAnsware.vue'
import * as api from '../../../api/indexTaskManage';
import { batchSendMessage } from "@/api/index1";
// import * as api from "../../../api/index";
export default {
@@ -364,7 +365,22 @@ export default {
//催促学员学习
const godie = () => {
message.destroy();
//项目催促请求报文
var obj = {
'courseId': props.datasource.courseId,//任务的Id
'courseName': props.title,//任务的名称
'logo': '1',//项目或径的标识 1-项目 2-路径图 3面授课
'routerTaskId': props.datasource.routerId,//任务的routerTaskld或projectTaskld
'targetId': props.datasource.routerId,//路径图的就是routerId,项目的是projectId;根据这张图来看的话
'taskType': props.datasource.type,//催促的任务的类型
'chapterId': props.datasource.chapterId,//阶段或关卡Id
};
batchSendMessage(obj).then(res => {
console.log(res)
message.success("成功");
}).catch(err => {
console.log(err)
})
message.success("催促" + props.title + "成功");
};
//导入成绩

View File

@@ -57,11 +57,11 @@
</div>
</div>
<div class="btnss" style="margin-top: 20px">
<!--
<div class="btn btn1" @click="godie" style="margin-right: 20px">
<div class="img1"></div>
<div class="wz">催促考试</div>
</div>-->
</div>
<div class="btn btn2" @click="exportData">
<div class="img2"></div>
<div class="wz">导出数据</div>
@@ -130,6 +130,7 @@
import { message } from "ant-design-vue";
import ExportAchievement from "../ExportAchievement.vue";
import * as api from '../../../api/indexTaskManage';
import { batchSendMessage } from "@/api/index1";
export default {
name: "ProjectExternalExamManage",
@@ -359,7 +360,22 @@
//催促学员学习
const godie = () => {
message.destroy();
//项目催促请求报文
var obj = {
'courseId': props.datasource.courseId,//任务的Id
'courseName': props.title,//任务的名称
'logo': '1',//项目或径的标识 1-项目 2-路径图 3面授课
'routerTaskId': props.datasource.routerId,//任务的routerTaskld或projectTaskld
'targetId': props.datasource.routerId,//路径图的就是routerId,项目的是projectId;根据这张图来看的话
'taskType': props.datasource.type,//催促的任务的类型
'chapterId': props.datasource.chapterId,//阶段或关卡Id
};
batchSendMessage(obj).then(res => {
console.log(res)
message.success("成功");
}).catch(err => {
console.log(err)
})
message.success("催促" + props.title + "成功");
};
//导入成绩

View File

@@ -57,10 +57,10 @@
</div>
</div>
<div class="btnss" style="margin-top: 20px">
<!-- <div class="btn btn1" @click="godie" style="margin-right: 20px">
<div class="btn btn1" @click="godie" style="margin-right: 20px">
<div class="img1"></div>
<div class="wz">催促考试</div>
</div>-->
</div>
<div class="btn btn2" @click="exportData">
<div class="img2"></div>
<div class="wz">导出数据</div>
@@ -129,6 +129,7 @@
import { message } from "ant-design-vue";
import ExportAchievement from "../ExportAchievement.vue";
import * as api from '../../../api/indexTaskManage';
import { batchSendMessage } from "@/api/index1";
// import * as api from "../../../api/index";
export default {
@@ -363,6 +364,22 @@
//催促学员学习
const godie = () => {
message.destroy();
//考试催促请求报文
var obj = {
'courseId': props.datasource.courseId,//任务的Id
'courseName': props.title,//任务的名称
'logo': '2',//项目或径的标识 1-项目 2-路径图 3面授课
'routerTaskId': props.datasource.routerId,//任务的routerTaskld或projectTaskld
'targetId': props.datasource.routerId,//路径图的就是routerId,项目的是projectId;根据这张图来看的话
'taskType': props.datasource.type,//催促的任务的类型
'chapterId': props.datasource.chapterId,//阶段或关卡Id
};
batchSendMessage(obj).then(res => {
console.log(res)
message.success("成功");
}).catch(err => {
console.log(err)
})
message.success("催促" + props.title + "成功");
};
//导入成绩

View File

@@ -33,10 +33,10 @@
</div>
</div>
<div class="btnss" style="margin-top: 20px">
<!-- <div class="btn btn1" @click="godie" style="margin-right: 20px">
<div class="btn btn1" @click="godie" style="margin-right: 20px">
<div class="img1"></div>
<div class="wz">催促考试</div>
</div>-->
</div>
<div class="btn btn2" @click="exportData">
<div class="img2"></div>
<div class="wz">导出数据</div>
@@ -88,6 +88,7 @@ import { message } from "ant-design-vue";
import EScore from "../ExportScore.vue";
import CheckAnsware from '../CheckAnsware.vue'
import * as api from '../../../api/indexTaskManage';
import { batchSendMessage } from "@/api/index1";
// import * as api from "../../../api/index";
export default {
@@ -365,7 +366,22 @@ export default {
//催促学员学习
const godie = () => {
message.destroy();
//考试催促请求报文
var obj = {
'courseId': props.datasource.courseId,//任务的Id
'courseName': props.title,//任务的名称
'logo': '2',//项目或径的标识 1-项目 2-路径图 3面授课
'routerTaskId': props.datasource.routerId,//任务的routerTaskld或projectTaskld
'targetId': props.datasource.routerId,//路径图的就是routerId,项目的是projectId;根据这张图来看的话
'taskType': props.datasource.type,//催促的任务的类型
'chapterId': props.datasource.chapterId,//阶段或关卡Id
};
batchSendMessage(obj).then(res => {
console.log(res)
message.success("成功");
}).catch(err => {
console.log(err)
})
message.success("催促" + props.title + "成功");
};
//导入成绩

View File

@@ -295,7 +295,7 @@ import {
AUDIENCE_LIST,
ORG_CHILD_LIST,
ORG_LIST,
// USER_LIST,
// USER_LIST,
USER_LIST_PAGE,
} from "@/api/ThirdApi";
import {
@@ -700,7 +700,7 @@ function onOrgSelectChange(e, l) {
selectsData.value.deptList = l.selectedNodes;
// 获取被点击的树节点
}
function onAuditSelectChange(e, l) {
@@ -781,7 +781,7 @@ function handleStageOk() {
// 判断是否是组长,组长不能添加
const leaderArray = selectsData.value.projectMemberList.filter(item => item.isLeader === '1');
if (leaderArray.length > 0) {
return message.warning("当前选学员"+leaderArray[0].realName+"已在其他小组为小组长,请勿重复选择。");
return message.warning("当前选学员"+leaderArray[0].realName+"已小组长,请勿重复选择。");
}
// 对选中的人员进行判断是否已经分组了
let haveGroupNum = selectsData.value.projectMemberList.filter(item => item.groupId !== null);

View File

@@ -1109,7 +1109,7 @@
</div>
</div>
</div>
<div class="cstm_items main_item">
<div class="cstm_items main_item" style="margin-bottom: 0px">
<div class="signbox"></div>
<div class="btnbox">
<add-test v-model:info="examInfo">
@@ -1151,7 +1151,7 @@
</a-checkbox>
</div>
</div> -->
<div class="cstm_items items_fj" style="height: 80px">
<div class="cstm_items items_fj">
<div class="signbox">
<span style="margin-right: 3px"></span>
</div>

View File

@@ -148,10 +148,10 @@
</a-modal>
<!-- 邀请审核弹窗 -->
<a-modal v-model:visible="courInvitationAuditModal" :footer="null" :closable="closeBack" wrapClassName="courAuditModal"
centered="true">
centered="true" style="height:400px;">
<div class="delete">
<div class="del_header"></div>
<div class="del_main">
<div class="del_main" style="height:400px;">
<div class="header">
<div class="icon"></div>
<span>请选择教师</span>

View File

@@ -1298,6 +1298,7 @@ const cancelStorage = async () => {
flex-wrap: wrap;
position: sticky;
top: 0;
z-index: 999;
.item {
height: 115px;

View File

@@ -275,7 +275,21 @@
</div>
<div class="setc_name"><span>项目说明:</span></div>
<div class="setc_main" style="width: 400px">
<span style="color: #999999">{{ remark }}</span>
<div
style="
width: 400px;
color: #999999;
word-wrap: break-word;
text-overflow: ellipsis;
overflow: hidden;
display: -webkit-box;
-webkit-line-clamp: 6;
-webkit-box-orient: vertical;
"
:title="remark"
>
{{ remark }}
</div>
</div>
</template>
<div
@@ -895,6 +909,7 @@
</a-tab-pane>
<a-tab-pane key="5" tab="项目积分">
<ProjectScore
v-if="activeKey=='5'"
:permissions="permissions"
:projectId="projectId"
></ProjectScore>
@@ -2356,7 +2371,7 @@ export default {
],
//小组信息列表
groupList: [],
isBatch: false, // 批量
isBatch: false, // 批量
// stuName: "", //搜索的学员姓名
// stuGroup: "", //搜索的学员小组名称
// stuBum: "", //搜索的学员小组部门
@@ -2442,6 +2457,7 @@ export default {
valueaddm: "", //创建小组输入小组长
valueaddg: "", //创建小组输入名称
groupInfo: { leaderName: "", leaderId: "" }, //创建小组
groupMemberCountContrast: null,
groupPageList: [], //小组列表
groupNumber: 0, //组员人数
valuestun: "", //学员管理姓名
@@ -3069,21 +3085,22 @@ export default {
};
//显示学员换组弹窗
const showChangeGroupModal = (record) => {
debugger
console.log("单个")
console.log("单个");
state.changegroupV = true;
console.log("点击换组", record.id);
state.checkgroupStuId = [];
state.checkgroupStuId.push(record.id) ;
state.checkgroupStuId.push(record.id);
};
const showModal2 = (item, isEdit) => {
state.isEdit = isEdit;
state.stugroup = true;
state.groupInfo = item || {};
state.groupMemberCountContrast = item.groupMemberCount;
};
const closeModal2 = () => {
state.stugroup = false;
state.groupInfo = {};
state.groupMemberCountContrast = null;
};
//点击确定创建小组
const createG = () => {
@@ -3100,7 +3117,6 @@ export default {
return message.warning("请输入组员数量");
}
createGroup();
closeModal2();
};
const showFaceIn = () => {
state.TaskFaceImpStuvisible = true;
@@ -3151,7 +3167,6 @@ export default {
}
//考勤的抽屉
const showAA = (course, a, data) => {
debugger
state.AAvisible = true;
state.liveData = data;
state.showKaoqinText = "直播";
@@ -3918,20 +3933,24 @@ export default {
//创建小组
const createGroup = async () => {
console.log("state.groupPageList" + state.groupPageList);
const d = state.groupPageList.filter(
const id = state.groupInfo.id;
const d = state.groupPageList.filter(item => item.id !== id).filter(
(item) => item.leaderId === state.groupInfo.leaderId
);
const id = state.groupInfo.id;
if (state.isEdit) {
if (d.length > 0 && d[0].id !== id) {
return message.warn(d[0].leaderName + "已是小组长,请重新选择");
}
// 小组人数只能由小改大,不能由大改小
if (state.groupMemberCountContrast > state.groupInfo.groupMemberCount) {
return message.warn("当前不支持修改组员人数小于原组员数量。");
}
} else {
if (d.length > 0) {
return message.warn(d[0].leaderName + "已是小组长,请重新选择");
return message.warn(d[0].leaderName + "已是小组长,请重新选择");
}
}
// 过滤掉编辑时候,只修改了组员最大值时候
state.isEdit = false;
await editGroup({ ...state.groupInfo, projectId: state.projectId });
@@ -3939,6 +3958,7 @@ export default {
getGroup();
console.log("state.groupPageList:");
getStu();
closeModal2();
};
//搜索小组重置
const resetGroupName = () => {

View File

@@ -15,8 +15,8 @@ module.exports = defineConfig({
port: 8070,
proxy: {
"/manageApi": {
//target: 'http:' + process.env.VUE_APP_PROXY_URL,
target: 'http://localhost:30001',
target: 'http:' + process.env.VUE_APP_PROXY_URL,
//target: 'http://localhost:30001',
changeOrigin: true, //表示是否改变原域名
pathRewrite: {
"^/manageApi": "",