522细节修改

This commit is contained in:
zhangsir
2024-01-31 18:26:02 +08:00
parent b0091a9c22
commit 74942ee4cf
7 changed files with 134 additions and 21 deletions

View File

@@ -53,6 +53,7 @@ export const getProjectList = (obj) => http.post('/admin/project/list', obj)
// 获取项目详情信息(包含阶段及任务列表) // 获取项目详情信息(包含阶段及任务列表)
export const getProjectDetail = (obj) => http.get('/admin/project/detail', {params: obj}) export const getProjectDetail = (obj) => http.get('/admin/project/detail', {params: obj})
export const getDraftTask = (obj) => http.get('/admin/project/detailDraft', { params: obj })
//发布项目 //发布项目
export const releaseProject = (obj) => http.post('/admin/project/publish', obj) export const releaseProject = (obj) => http.post('/admin/project/publish', obj)
//获取项目学员 //获取项目学员

View File

@@ -21,12 +21,14 @@
</div> </div>
<div class="downloadCode" style=""> <div class="downloadCode" style="">
<div class="qrm_body"> <div class="qrm_body">
<div v-if="codeInfo.name" class="codename"> <div class="qrm_body_item">
<div v-if="codeInfo.name" class="codename">
开课{{ codeInfo.name ? codeInfo.name : "" }} 开课{{ codeInfo.name ? codeInfo.name : "" }}
</div> </div>
<div v-if="codeInfo.teacherName" class="codename"> <div v-if="codeInfo.teacherName" class="codename">
讲师{{ codeInfo.teacherName ? codeInfo.teacherName : "" }} 讲师{{ codeInfo.teacherName ? codeInfo.teacherName : "" }}
</div> </div>
</div>
<qrcode-vue <qrcode-vue
:value="codeInfo.url.startsWith('/')?(`${domain+codeInfo.url}&t=10`):`${codeInfo.url}&t=10`" :value="codeInfo.url.startsWith('/')?(`${domain+codeInfo.url}&t=10`):`${codeInfo.url}&t=10`"
:size="qrcodeSize" :size="qrcodeSize"
@@ -245,6 +247,10 @@ export default {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
.qrm_body_item{
width: 100%;
margin-left: 270px;
}
.codename { .codename {
font-size: 18px; font-size: 18px;
font-weight: 400; font-weight: 400;
@@ -253,6 +259,10 @@ export default {
margin-bottom: 20px; margin-bottom: 20px;
margin-left: 20px; margin-left: 20px;
margin-right: 20px; margin-right: 20px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
max-width: 300px;
} }
} }
.codeUrl { .codeUrl {

View File

@@ -564,7 +564,15 @@ const closeChangeModal = () => {
}; };
//暂存 //暂存
const currentTaskList = computed(() => {
return routerInfo.value?.chapterList[activeIndex.value]?.draftTaskList.length;
});
watch(currentTaskList, (oldValue,newValue) => {
request(ROUTER_DETAIL_MODIFY, routerInfo.value)
getDetail()
});
const temporaryStorage = async () => { const temporaryStorage = async () => {
console.log(routerInfo.value,'routerInfo.value')
confirmLoading.value = true; confirmLoading.value = true;
await request(ROUTER_DETAIL_MODIFY, routerInfo.value); await request(ROUTER_DETAIL_MODIFY, routerInfo.value);
await getDetail(); await getDetail();

View File

@@ -572,6 +572,16 @@
> >
</div> </div>
</div> </div>
<div class="set_content">
<div class="setc_name"><span>积分排行榜</span></div>
<div class="setc_main">
<a-radio v-model:checked="projectInfo.rankFlag" :disabled="true"
><span style="color: #333333"
>是否显示积分</span
></a-radio
>
</div>
</div>
<div class="set_content" v-if="projectInfo.remark "> <div class="set_content" v-if="projectInfo.remark ">
<div class="setc_name"><span>项目说明</span></div> <div class="setc_name"><span>项目说明</span></div>
<div class="setc_main"> <div class="setc_main">
@@ -1205,6 +1215,7 @@ export default defineComponent({
systemId: state.projectInfo.systemId, systemId: state.projectInfo.systemId,
boeFlag: state.projectInfo.boeFlag ? 1 : 0, boeFlag: state.projectInfo.boeFlag ? 1 : 0,
courseSyncFlag: state.projectInfo.courseSyncFlag ? 1 : 0, courseSyncFlag: state.projectInfo.courseSyncFlag ? 1 : 0,
rankFlag: state.projectInfo.rankFlag ? 1 : 0,
notice: state.projectInfo.notice, notice: state.projectInfo.notice,
noticeFlag: state.projectInfo.noticeFlag, noticeFlag: state.projectInfo.noticeFlag,
projectTemplateId: projectId, projectTemplateId: projectId,
@@ -1226,6 +1237,7 @@ export default defineComponent({
systemId: state.projectInfo.systemId, systemId: state.projectInfo.systemId,
boeFlag: state.projectInfo.boeFlag ? 1 : 0, boeFlag: state.projectInfo.boeFlag ? 1 : 0,
courseSyncFlag: state.projectInfo.courseSyncFlag ? 1 : 0, courseSyncFlag: state.projectInfo.courseSyncFlag ? 1 : 0,
rankFlag: state.projectInfo.rankFlag ? 1 : 0,
notice: state.projectInfo.notice, notice: state.projectInfo.notice,
noticeFlag: state.projectInfo.noticeFlag, noticeFlag: state.projectInfo.noticeFlag,
projectTemplateId: projectId, projectTemplateId: projectId,

View File

@@ -175,7 +175,7 @@
color: rgba(109, 117, 132, 1); color: rgba(109, 117, 132, 1);
font-size: 14px; font-size: 14px;
"> ">
是否示积分 是否示积分
</span> </span>
</a-checkbox> </a-checkbox>
</div> </div>

View File

@@ -227,6 +227,25 @@
> >
</div> </div>
</div> </div>
<div class="name name2">
<div class="namebox">
<div class="inname">积分排行榜</div>
</div>
<div class="in">
<a-checkbox
v-model:checked="rankFlag"
:disabled="viewDetail ? true : false"
><span
style="
width: 100%;
color: rgba(109, 117, 132, 1);
font-size: 14px;
"
>是否显示积分</span
></a-checkbox
>
</div>
</div>
<div class="name name2"> <div class="name name2">
<div class="namebox"> <div class="namebox">
<div class="inname" style="margin-top: 13px">项目说明</div> <div class="inname" style="margin-top: 13px">项目说明</div>
@@ -365,6 +384,7 @@ export default {
pageSize1: 10, //项目经理 pageSize1: 10, //项目经理
projectInfo: {}, projectInfo: {},
courseSyncFlag: false, courseSyncFlag: false,
rankFlag:false,
learnBgMore: false, learnBgMore: false,
projectPic: [], projectPic: [],
loading: false, loading: false,
@@ -404,6 +424,7 @@ export default {
state.projectInfo.endTime, state.projectInfo.endTime,
]; ];
state.courseSyncFlag = !!state.projectInfo.courseSyncFlag; state.courseSyncFlag = !!state.projectInfo.courseSyncFlag;
state.rankFlag = !!state.projectInfo.rankFlag
}); });
} }
@@ -473,6 +494,7 @@ export default {
return message.warning("项目名称重复,请重新填写"); return message.warning("项目名称重复,请重新填写");
} }
state.projectInfo.courseSyncFlag = state.courseSyncFlag ? 1 : 0; state.projectInfo.courseSyncFlag = state.courseSyncFlag ? 1 : 0;
state.projectInfo.rankFlag = state.rankFlag ? 1 : 0;
api.createProject(state.projectInfo).then(() => { api.createProject(state.projectInfo).then(() => {
state.loading = false; state.loading = false;
message.destroy(); message.destroy();

View File

@@ -616,14 +616,14 @@
</div> </div>
<div class="operations"> <div class="operations">
<div class="operations_dropdown"> <div class="operations_dropdown">
<a-dropdown :getPopupContainer='triggerNode=> triggerNode.parentNode' v-if="isAssessmentIdsValid(item.assessmentIds)" :trigger="['click']" v-model:visible="visibleEwmpg[item.id]"> <a-dropdown :getPopupContainer='triggerNode=> triggerNode.parentNode' v-if="item.assessmentIds.filter(id => id !== null).length>1" :trigger="['click']" v-model:visible="visibleEwmpg[item.id]">
<a class="ant-dropdown-link" @click="qrcodeAssement(item)"> <a class="ant-dropdown-link" @click="qrcodeAssement(item)">
评估二维码 评估二维码
<DownOutlined /> <DownOutlined />
</a> </a>
<template #overlay> <template #overlay>
<a-menu @click="handleMenuClickpg"> <a-menu @click="handleMenuClickpg">
<template v-for="(item, index) in qrCodeItemspg" :key="item.courseName+'+'+item.createName+'+'+item.assessmentId+'+'+item.name+'+'+item.id"> <template v-for="(item, index) in qrCodeItemspg" :key="index">
<a-menu-item> <a-menu-item>
<div> <div>
<p>{{ item.name }}</p> <p>{{ item.name }}</p>
@@ -634,7 +634,13 @@
</template> </template>
</a-dropdown> </a-dropdown>
</div> </div>
<div class="operations_dropdown"> <div class="operations_dropdown" v-if="item.assessmentIds.filter(id => id !== null).length==1">
<a class="ant-dropdown-link" @click="qrcodeAssement(item)">
评估二维码
<DownOutlined />
</a>
</div>
<div class="operations_dropdown" v-if="item.assessmentIds.length!=1">
<a-dropdown :getPopupContainer='(triggerNode) => triggerNode.parentNode' v-if="item.type == 2" :trigger="['click']" v-model:visible="visibleEwm[item.id]"> <a-dropdown :getPopupContainer='(triggerNode) => triggerNode.parentNode' v-if="item.type == 2" :trigger="['click']" v-model:visible="visibleEwm[item.id]">
<a class="ant-dropdown-link" @click="qrcodeVisible(item)"> <a class="ant-dropdown-link" @click="qrcodeVisible(item)">
签到二维码 签到二维码
@@ -642,7 +648,7 @@
</a> </a>
<template #overlay v-if="qrCodeItems.length>0"> <template #overlay v-if="qrCodeItems.length>0">
<a-menu @click="handleMenuClick"> <a-menu @click="handleMenuClick">
<template v-for="(item, index) in qrCodeItems" :key="item.courseName+'+'+item.createName+'+'+item.name+'+'+item.id"> <template v-for="(item, index) in qrCodeItems" :key="index">
<a-menu-item> <a-menu-item>
<div> <div>
<p>{{ item.name }}</p> <p>{{ item.name }}</p>
@@ -653,6 +659,20 @@
</template> </template>
</a-dropdown> </a-dropdown>
</div> </div>
<div class="operations_dropdown" v-if="item.assessmentIds.length==1">
<a class="ant-dropdown-link" @click="qrcodeVisible(item)">
签到二维码
<DownOutlined />
</a>
</div>
<div
class="operation"
style="cursor: pointer"
@click="openCourse(item,index)"
v-if="item.type == 2"
>
开课
</div>
<div <div
class="operation" class="operation"
style="cursor: pointer" style="cursor: pointer"
@@ -1330,6 +1350,16 @@
> >
</div> </div>
</div> </div>
<div class="set_content">
<div class="setc_name"><span>积分排行榜</span></div>
<div class="setc_main">
<a-radio v-model:checked="rankFlag" :disabled="true"
><span style="color: #333333"
>是否显示积分</span
></a-radio
>
</div>
</div>
<div class="set_content" v-if="remark"> <div class="set_content" v-if="remark">
<div class="setc_name"><span>项目说明:</span></div> <div class="setc_name"><span>项目说明:</span></div>
<div class="setc_main"> <div class="setc_main">
@@ -2306,9 +2336,12 @@
:checkgroupStuId="checkgroupStuId" :checkgroupStuId="checkgroupStuId"
/> />
<!-- 换组弹窗 --> <!-- 换组弹窗 -->
<!-- 面授课开课弹框 -->
<AddOpenCourse ref="coursePlanRef" :type="1"/>
</div> </div>
</template> </template>
<script lang="jsx"> <script lang="jsx">
import AddOpenCourse from "@/components/drawers/AddOpenCourse.vue";
import { reactive, toRefs, onMounted, watch, computed,ref } from "vue"; import { reactive, toRefs, onMounted, watch, computed,ref } from "vue";
import { useRoute } from "vue-router"; import { useRoute } from "vue-router";
import { useRouter } from "vue-router"; import { useRouter } from "vue-router";
@@ -2399,8 +2432,15 @@ export default {
ProjectVoteManage, ProjectVoteManage,
ChangeGroupModal, ChangeGroupModal,
ImpoterGroupLeader, ImpoterGroupLeader,
AddOpenCourse
}, },
setup() { setup() {
const coursePlanRef = ref();
const openCourse = async (item) => {
await apitl.getDraftTask({projectId: item.projectId}).then((item)=>{
coursePlanRef.value.openDrawer(item.data.data.stageList[0].taskDraftDtoList[0]);
})
}
const qrCodeItems = ref([]); const qrCodeItems = ref([]);
const visibleEwm = ref({}); const visibleEwm = ref({});
const qrcodeVisible = async (item)=>{ const qrcodeVisible = async (item)=>{
@@ -2418,29 +2458,36 @@ export default {
...dataItem, ...dataItem,
courseName: item.name, courseName: item.name,
})); }));
if(qrCodeItems.value.length==1){
qrCode({
title: "【签到】二维码",
courseName: qrCodeItems.value[0].courseName,
name: qrCodeItems.value[0].name+'课程签到',
createName:qrCodeItems.value[0].offteachers.map(teacher => teacher.teacherName).join(', ')||qrCodeItems.value[0].teacher,
url: `${location.protocol}//${location.host}${process.env.VUE_APP_BASE_API}/admin/student/studentSign?taskId=${qrCodeItems.value[0].id}&taskType=${2}&type=${3}`,
});
}
if(qrCodeItems.value.length==0){ if(qrCodeItems.value.length==0){
message.info("暂无签到二维码") message.info("暂无签到二维码")
} }
}) })
} }
function handleMenuClick({key}) { function handleMenuClick({key}) {
const courseName = key.split("+")[0] const courseName = qrCodeItems.value[key].courseName;
const createName = key.split("+")[1] const name = qrCodeItems.value[key].name;
const name = key.split("+")[2] const teacher = qrCodeItems.value[key].teacher;
const id = key.split("+")[3] const id = qrCodeItems.value[key].id;
const offteachers = qrCodeItems.value[key].offteachers.map(teacher => teacher.teacherName).join(', ');
qrCode({ qrCode({
title: "【签到】二维码", title: "【签到】二维码",
courseName: courseName, courseName: courseName,
name: name+'课程签到', name: name+'课程签到',
createName:createName, createName:offteachers||teacher,
url: `${location.protocol}//${location.host}${process.env.VUE_APP_BASE_API}/admin/student/studentSign?taskId=${id}&taskType=${2}&type=${3}`, url: `${location.protocol}//${location.host}${process.env.VUE_APP_BASE_API}/admin/student/studentSign?taskId=${id}&taskType=${2}&type=${3}`,
}); });
} }
const qrCodeItemspg = ref([]); const qrCodeItemspg = ref([]);
const visibleEwmpg = ref({}); const visibleEwmpg = ref({});
const isAssessmentIdsValid = (assessmentIds) => {
return assessmentIds.length > 0 && assessmentIds.every(id => id !== null);
};
const qrcodeAssement = async (item)=>{ const qrcodeAssement = async (item)=>{
console.log(item,'item') console.log(item,'item')
if(qrCodeItemspg.value.length!=0){ if(qrCodeItemspg.value.length!=0){
@@ -2459,19 +2506,29 @@ export default {
})); }));
qrCodeItemspg.value = qrCodeItemspgItem.filter(item => item.assessmentId !== null); qrCodeItemspg.value = qrCodeItemspgItem.filter(item => item.assessmentId !== null);
console.log(qrCodeItemspg.value,'长度') console.log(qrCodeItemspg.value,'长度')
if(qrCodeItemspg.value.length==1){
qrCode({
title: "【评估】二维码",
courseName: qrCodeItemspg.value[0].courseName,
name: qrCodeItemspg.value[0].name+'课程评估',
createName:qrCodeItemspg.value[0].offteachers.map(teacher => teacher.teacherName).join(', ')||qrCodeItemspg.value[0].teacher,
url: `${location.protocol}//${location.host}/student-h5/investigatpage?id=${qrCodeItemspg.value[0].id}&type=3&infoId=${qrCodeItemspg.value[0].id}&courseId=${qrCodeItemspg.value[0].assessmentId}&chapterOrStageId=0`,
});
}
}) })
} }
function handleMenuClickpg({key}) { function handleMenuClickpg({key}) {
const courseName = key.split("+")[0] const courseName = qrCodeItemspg.value[key].courseName;
const createName = key.split("+")[1] const name = qrCodeItemspg.value[key].name;
const assessmentId = key.split("+")[2] const offteachers = qrCodeItemspg.value[key].offteachers.map(teacher => teacher.teacherName).join(', ');
const name = key.split("+")[3] const teacher = qrCodeItemspg.value[key].teacher;
const id = key.split("+")[4] const id = qrCodeItemspg.value[key].id;
const assessmentId = qrCodeItemspg.value[key].assessmentId;
qrCode({ qrCode({
title: "【评估】二维码", title: "【评估】二维码",
courseName: courseName, courseName: courseName,
name: name+'课程评估', name: name+'课程评估',
createName:createName, createName:offteachers||teacher,
url: `${location.protocol}//${location.host}/student-h5/investigatpage?id=${id}&type=3&infoId=${id}&courseId=${assessmentId}&chapterOrStageId=0`, url: `${location.protocol}//${location.host}/student-h5/investigatpage?id=${id}&type=3&infoId=${id}&courseId=${assessmentId}&chapterOrStageId=0`,
}); });
} }
@@ -2678,6 +2735,7 @@ export default {
checked1: true, checked1: true,
checked2: false, checked2: false,
checkedSty: false, //同步学习记录 checkedSty: false, //同步学习记录
rankFlag:false,
checkedBOEU: false, //是否BOEU实施 checkedBOEU: false, //是否BOEU实施
radioV1: "", radioV1: "",
radioV2: "", radioV2: "",
@@ -4117,6 +4175,7 @@ export default {
state.systemId = info.systemId; state.systemId = info.systemId;
state.tsystemId = info.systemId; state.tsystemId = info.systemId;
state.checkedSty = info.courseSyncFlag == 1; state.checkedSty = info.courseSyncFlag == 1;
state.rankFlag = info.rankFlag == 1;
state.courseSyncFlag = info.courseSyncFlag; state.courseSyncFlag = info.courseSyncFlag;
state.checkedBOEU = info.boeFlag == 1; state.checkedBOEU = info.boeFlag == 1;
state.boeFlag = info.boeFlag; state.boeFlag = info.boeFlag;
@@ -5162,7 +5221,8 @@ export default {
qrCodeItemspg, qrCodeItemspg,
visibleEwmpg, visibleEwmpg,
handleMenuClickpg, handleMenuClickpg,
isAssessmentIdsValid coursePlanRef,
openCourse