Merge branch 'develop' of ssh://gitlab.dongwu-inc.com:10022/BOE/fe-manage into develop

This commit is contained in:
wuxt
2023-03-08 00:46:50 +08:00
27 changed files with 516 additions and 255 deletions

1
.env
View File

@@ -18,6 +18,7 @@ VUE_APP_OUTPUT_DIR=./dist
VUE_APP_IFRAME_URL=//u-pre.boe.com/pc/iframe VUE_APP_IFRAME_URL=//u-pre.boe.com/pc/iframe
# 学员端路由 # 学员端路由
VUE_APP_IFRAME_STUDENT_URL=//u-pre.boe.com/pc/loading VUE_APP_IFRAME_STUDENT_URL=//u-pre.boe.com/pc/loading
VUE_APP_IFRAME_TEACHER_URL=//u-pre.boe.com/pc/need/waitaudit
# 课程二维码 # 课程二维码
VUE_APP_COURSE_STUDY=//u-pre.boe.com/pc/course/studyindex?id= VUE_APP_COURSE_STUDY=//u-pre.boe.com/pc/course/studyindex?id=

View File

@@ -10,6 +10,7 @@ VUE_APP_BOE_API_URL=//u.boe.com
VUE_APP_IFRAME_URL=//u.boe.com/pc/iframe VUE_APP_IFRAME_URL=//u.boe.com/pc/iframe
VUE_APP_IFRAME_STUDENT_URL=//u.boe.com/pc/loading VUE_APP_IFRAME_STUDENT_URL=//u.boe.com/pc/loading
VUE_APP_IFRAME_TEACHER_URL=//u-pre.boe.com/pc/need/waitaudit
VUE_APP_COURSE_STUDY=//u.boe.com/pc/course/studyindex?id= VUE_APP_COURSE_STUDY=//u.boe.com/pc/course/studyindex?id=

View File

@@ -10,6 +10,7 @@ VUE_APP_BOE_API_URL=//u.boe.com
VUE_APP_IFRAME_URL=//u.boe.com/pc-release/iframe VUE_APP_IFRAME_URL=//u.boe.com/pc-release/iframe
VUE_APP_IFRAME_STUDENT_URL=//u.boe.com/pc-release/loading VUE_APP_IFRAME_STUDENT_URL=//u.boe.com/pc-release/loading
VUE_APP_IFRAME_TEACHER_URL=//u-pre.boe.com/pc-release/need/waitaudit
VUE_APP_COURSE_STUDY=//u.boe.com/pc-release/course/studyindex?id= VUE_APP_COURSE_STUDY=//u.boe.com/pc-release/course/studyindex?id=

View File

@@ -280,6 +280,7 @@ const organizationalTree = []
const iframeUrl = window.location.protocol + process.env.VUE_APP_IFRAME_URL const iframeUrl = window.location.protocol + process.env.VUE_APP_IFRAME_URL
//学员端路由 //学员端路由
const studentUrl = window.location.protocol + process.env.VUE_APP_IFRAME_STUDENT_URL const studentUrl = window.location.protocol + process.env.VUE_APP_IFRAME_STUDENT_URL
const teacherUrl = window.location.protocol + process.env.VUE_APP_IFRAME_TEACHER_URL
//二维码 //二维码
const codeUrl = window.location.protocol + "//u-pre.boe.com" const codeUrl = window.location.protocol + "//u-pre.boe.com"
@@ -297,5 +298,6 @@ export {
organizationalTree, organizationalTree,
iframeUrl, iframeUrl,
studentUrl, studentUrl,
teacherUrl,
codeUrl, codeUrl,
} }

View File

@@ -1,39 +1,46 @@
<template> <template>
<div <div
class="navLeft" class="navLeft"
:style="{ :style="{
width: packup ? '100px' : '208px', width: packup ? '100px' : '208px',
'min-height': screenHeight - 80 + 'px', 'min-height': screenHeight - 80 + 'px',
}" }"
> >
<div style="display: flex; justify-content: flex-end"> <div style="display: flex; justify-content: flex-end">
<img <img
class="packup" class="packup"
src="../assets/images/navleft/packup.png" src="../assets/images/navleft/packup.png"
@click="packUp" @click="packUp"
:style="{ 'margin-right': packup ? '36px' : '14px' }" :style="{ 'margin-right': packup ? '36px' : '14px' }"
/> />
</div> </div>
<div <div
style="width: 100%; margin-top: 26px" style="width: 100%; margin-top: 26px"
:style="{ display: packup ? 'none' : 'block' }" :style="{ display: packup ? 'none' : 'block' }"
> >
<a-menu <a-menu
id="dddddd" id="dddddd"
:open-keys="openKeys" :open-keys="openKeys"
:selectedKeys="selectedKeys" :selectedKeys="selectedKeys"
style="width: 208px" style="width: 208px"
mode="inline" mode="inline"
@openChange="onOpenChange" @openChange="onOpenChange"
@select="selectItem" @select="selectItem"
> >
<a-sub-menu v-if="checkMenu('coursereviewedn,coursereviewed,projectreviewedn,projectreviewed')" key="sub10" <a-sub-menu
@titleClick="titleClick"> v-if="
checkMenu(
'coursereviewedn,coursereviewed,projectreviewedn,projectreviewed'
)
"
key="sub10"
@titleClick="titleClick"
>
<template #icon> <template #icon>
<div class="imgBox"> <div class="imgBox">
<img <img
style="width: 22px; height: 22px" style="width: 22px; height: 22px"
src="../assets/images/navleft/review.png" src="../assets/images/navleft/review.png"
/> />
</div> </div>
</template> </template>
@@ -42,7 +49,7 @@
<span <span
:class="{ :class="{
circleActive: selectedKeys[0] === 'sub10-5', circleActive: selectedKeys[0] === 'sub10-5',
circle: selectedKeys[0]!=='sub10-5', circle: selectedKeys[0] !== 'sub10-5',
}" }"
></span> ></span>
<router-link to="/TobeOnlineReviewed">待审核在线课</router-link> <router-link to="/TobeOnlineReviewed">待审核在线课</router-link>
@@ -51,14 +58,14 @@
<span <span
:class="{ :class="{
circleActive: selectedKeys[0] === 'sub10-6', circleActive: selectedKeys[0] === 'sub10-6',
circle: selectedKeys[0]!=='sub10-6', circle: selectedKeys[0] !== 'sub10-6',
}" }"
></span> ></span>
<router-link to="/OnlineReviewed">已审核在线课</router-link> <router-link to="/OnlineReviewed">已审核在线课</router-link>
</a-menu-item> </a-menu-item>
<a-menu-item key="sub10-1" v-if="checkMenu('coursereviewedn')"> <a-menu-item key="sub10-1" v-if="checkMenu('coursereviewedn')">
<span <span
:class="{ :class="{
circleActive: selectedKeys[0] === 'sub10-1' ? true : false, circleActive: selectedKeys[0] === 'sub10-1' ? true : false,
circle: selectedKeys[0] === 'sub10-1' ? false : true, circle: selectedKeys[0] === 'sub10-1' ? false : true,
}" }"
@@ -67,7 +74,7 @@
</a-menu-item> </a-menu-item>
<a-menu-item key="sub10-2" v-if="checkMenu('coursereviewed')"> <a-menu-item key="sub10-2" v-if="checkMenu('coursereviewed')">
<span <span
:class="{ :class="{
circleActive: selectedKeys[0] === 'sub10-2' ? true : false, circleActive: selectedKeys[0] === 'sub10-2' ? true : false,
circle: selectedKeys[0] === 'sub10-2' ? false : true, circle: selectedKeys[0] === 'sub10-2' ? false : true,
}" }"
@@ -76,7 +83,7 @@
</a-menu-item> </a-menu-item>
<a-menu-item key="sub10-3" v-if="checkMenu('projectreviewedn')"> <a-menu-item key="sub10-3" v-if="checkMenu('projectreviewedn')">
<span <span
:class="{ :class="{
circleActive: selectedKeys[0] === 'sub10-3' ? true : false, circleActive: selectedKeys[0] === 'sub10-3' ? true : false,
circle: selectedKeys[0] === 'sub10-3' ? false : true, circle: selectedKeys[0] === 'sub10-3' ? false : true,
}" }"
@@ -85,7 +92,7 @@
</a-menu-item> </a-menu-item>
<a-menu-item key="sub10-4" v-if="checkMenu('projectreviewed')"> <a-menu-item key="sub10-4" v-if="checkMenu('projectreviewed')">
<span <span
:class="{ :class="{
circleActive: selectedKeys[0] === 'sub10-4' ? true : false, circleActive: selectedKeys[0] === 'sub10-4' ? true : false,
circle: selectedKeys[0] === 'sub10-4' ? false : true, circle: selectedKeys[0] === 'sub10-4' ? false : true,
}" }"
@@ -94,29 +101,37 @@
</a-menu-item> </a-menu-item>
</a-sub-menu> </a-sub-menu>
<a-menu-item key="sub1" @titleClick="titleClick" v-if="checkMenu('learningpath')"> <a-menu-item
key="sub1"
@titleClick="titleClick"
v-if="checkMenu('learningpath')"
>
<div class="imgBox"> <div class="imgBox">
<img <img
style="width: 20px; height: 18px" style="width: 20px; height: 18px"
src="../assets/images/navleft/studyPath.png" src="../assets/images/navleft/studyPath.png"
/> />
</div> </div>
<router-link to="/learningpath">学习路径图</router-link> <router-link to="/learningpath">学习路径图</router-link>
</a-menu-item> </a-menu-item>
<a-sub-menu key="sub2" @titleClick="titleClick" v-if="checkMenu('projectmanage,templatelibrary')"> <a-sub-menu
key="sub2"
@titleClick="titleClick"
v-if="checkMenu('projectmanage,templatelibrary')"
>
<template #icon> <template #icon>
<div class="imgBox"> <div class="imgBox">
<img <img
style="width: 15px; height: 15px" style="width: 15px; height: 15px"
src="../assets/images/navleft/project.png" src="../assets/images/navleft/project.png"
/> />
</div> </div>
</template> </template>
<template #title>项目中心</template> <template #title>项目中心</template>
<a-menu-item key="sub2-1" v-if="checkMenu('projectmanage')"> <a-menu-item key="sub2-1" v-if="checkMenu('projectmanage')">
<span <span
:class="{ :class="{
circleActive: selectedKeys[0] === 'sub2-1' ? true : false, circleActive: selectedKeys[0] === 'sub2-1' ? true : false,
circle: selectedKeys[0] === 'sub2-1' ? false : true, circle: selectedKeys[0] === 'sub2-1' ? false : true,
}" }"
@@ -125,7 +140,7 @@
</a-menu-item> </a-menu-item>
<a-menu-item key="sub2-2" v-if="checkMenu('templatelibrary')"> <a-menu-item key="sub2-2" v-if="checkMenu('templatelibrary')">
<span <span
:class="{ :class="{
circleActive: selectedKeys[0] === 'sub2-2' ? true : false, circleActive: selectedKeys[0] === 'sub2-2' ? true : false,
circle: selectedKeys[0] === 'sub2-2' ? false : true, circle: selectedKeys[0] === 'sub2-2' ? false : true,
}" }"
@@ -134,19 +149,22 @@
</a-menu-item> </a-menu-item>
</a-sub-menu> </a-sub-menu>
<a-sub-menu key="sub3" v-if="checkMenu('coursewaremanage,onlinemanage,coursemanage')"> <a-sub-menu
key="sub3"
v-if="checkMenu('coursewaremanage,onlinemanage,coursemanage')"
>
<template #icon> <template #icon>
<div class="imgBox"> <div class="imgBox">
<img <img
style="width: 18px; height: 15px" style="width: 18px; height: 15px"
src="../assets/images/navleft/course.png" src="../assets/images/navleft/course.png"
/> />
</div> </div>
</template> </template>
<template #title>课程库</template> <template #title>课程库</template>
<a-menu-item key="sub3-1" v-if="checkMenu('coursewaremanage')"> <a-menu-item key="sub3-1" v-if="checkMenu('coursewaremanage')">
<span <span
:class="{ :class="{
circleActive: selectedKeys[0] === 'sub3-1' ? true : false, circleActive: selectedKeys[0] === 'sub3-1' ? true : false,
circle: selectedKeys[0] === 'sub3-1' ? false : true, circle: selectedKeys[0] === 'sub3-1' ? false : true,
}" }"
@@ -155,7 +173,7 @@
</a-menu-item> </a-menu-item>
<a-menu-item key="sub3-2" v-if="checkMenu('onlinemanage')"> <a-menu-item key="sub3-2" v-if="checkMenu('onlinemanage')">
<span <span
:class="{ :class="{
circleActive: selectedKeys[0] === 'sub3-2' ? true : false, circleActive: selectedKeys[0] === 'sub3-2' ? true : false,
circle: selectedKeys[0] === 'sub3-2' ? false : true, circle: selectedKeys[0] === 'sub3-2' ? false : true,
}" }"
@@ -164,7 +182,7 @@
</a-menu-item> </a-menu-item>
<a-menu-item key="sub3-3" v-if="checkMenu('coursemanage')"> <a-menu-item key="sub3-3" v-if="checkMenu('coursemanage')">
<span <span
:class="{ :class="{
circleActive: selectedKeys[0] === 'sub3-3' ? true : false, circleActive: selectedKeys[0] === 'sub3-3' ? true : false,
circle: selectedKeys[0] === 'sub3-3' ? false : true, circle: selectedKeys[0] === 'sub3-3' ? false : true,
}" }"
@@ -182,56 +200,65 @@
</div> </div>
<span>考试中心</span> <span>考试中心</span>
</a-menu-item> --> </a-menu-item> -->
<a-menu-item key="sub5" @titleClick="titleClick" v-if="checkMenu('researchmanage')"> <a-menu-item
key="sub5"
@titleClick="titleClick"
v-if="checkMenu('researchmanage')"
>
<div class="imgBox"> <div class="imgBox">
<img <img
style="width: 16px; height: 16px" style="width: 16px; height: 16px"
src="../assets/images/navleft/survey.png" src="../assets/images/navleft/survey.png"
/> />
</div> </div>
<router-link to="/researchmanage">评估管理</router-link> <router-link to="/researchmanage">评估管理</router-link>
</a-menu-item> </a-menu-item>
<a-sub-menu key="sub6" v-if="checkMenu('OldSystemManage','ReadingClubManage','dictmanage')"> <!-- <a-sub-menu
key="sub6"
v-if="checkMenu('OldSystemManage', 'ReadingClubManage', 'dictmanage')"
>
<template #icon> <template #icon>
<div class="imgBox"> <div class="imgBox">
<img <img
style="width: 22px; height: 22px" style="width: 22px; height: 22px"
src="../assets/images/navleft/review.png" src="../assets/images/navleft/review.png"
/> />
</div> </div>
</template> </template>
<template #title>系统管理</template> <template #title>系统管理</template>
<a-menu-item key="sub6-1" v-if="checkMenu('OldSystemManage')"> <a-menu-item key="sub6-1" v-if="checkMenu('OldSystemManage')">
<span <span
:class="{ :class="{
circleActive: selectedKeys[0] === 'sub6-1', circleActive: selectedKeys[0] === 'sub6-1',
circle: selectedKeys[0]!=='sub6-1', circle: selectedKeys[0] !== 'sub6-1',
}" }"
></span> ></span>
<router-link to="/OldSystemManage">旧版管理员界面</router-link> <router-link to="/OldSystemManage">旧版管理员界面</router-link>
</a-menu-item> </a-menu-item>
<a-menu-item key="sub6-2" v-if="checkMenu('ReadingClubManage')"> <a-menu-item key="sub6-2" v-if="checkMenu('ReadingClubManage')">
<span <span
:class="{ :class="{
circleActive: selectedKeys[0] === 'sub6-2', circleActive: selectedKeys[0] === 'sub6-2',
circle: selectedKeys[0]!=='sub6-2', circle: selectedKeys[0] !== 'sub6-2',
}" }"
></span> ></span>
<router-link to="/ReadingClubManage">业务支援读书会管理</router-link> <router-link to="/ReadingClubManage"
>业务支援读书会管理</router-link
>
</a-menu-item> </a-menu-item>
<a-menu-item key="sub6-4" v-if="checkMenu('dictmanage')"> <a-menu-item key="sub6-4" v-if="checkMenu('dictmanage')">
<span <span
:class="{ :class="{
circleActive: selectedKeys[0] === 'sub6-4', circleActive: selectedKeys[0] === 'sub6-4',
circle: selectedKeys[0]!=='sub6-4', circle: selectedKeys[0] !== 'sub6-4',
}" }"
></span> ></span>
<router-link to="/dictmanage">字典管理</router-link> <router-link to="/dictmanage">字典管理</router-link>
</a-menu-item> </a-menu-item>
</a-sub-menu> </a-sub-menu> -->
<a-sub-menu key="sub7" v-if="checkMenu('AudienceManage')"> <!-- <a-sub-menu key="sub7" v-if="checkMenu('AudienceManage')">
<template #icon> <template #icon>
<div class="imgBox"> <div class="imgBox">
<img <img
@@ -250,8 +277,16 @@
></span> ></span>
<router-link to="/AudienceManage">受众管理</router-link> <router-link to="/AudienceManage">受众管理</router-link>
</a-menu-item> </a-menu-item>
</a-sub-menu> </a-sub-menu> -->
<a-menu-item key="sub7" v-if="checkMenu('AudienceManage')">
<div class="imgBox">
<img
style="width: 22px; height: 22px"
src="../assets/images/navleft/review.png"
/>
</div>
<router-link to="/audiencemanage">受众管理</router-link>
</a-menu-item>
<!-- <a-menu-item key="sub5" v-if="checkMenu('researchmanage')"> <!-- <a-menu-item key="sub5" v-if="checkMenu('researchmanage')">
<div class="imgBox"> <div class="imgBox">
<img style="width: 16px; height: 16px" src="../assets/images/navleft/system.png"/> <img style="width: 16px; height: 16px" src="../assets/images/navleft/system.png"/>
@@ -299,20 +334,23 @@
<!-- <router-link to="/systemmanage">系统管理</router-link> --> <!-- <router-link to="/systemmanage">系统管理</router-link> -->
<!-- </a-menu-item> --> <!-- </a-menu-item> -->
<a-sub-menu key="sub11" @titleClick="titleClick" <a-sub-menu
v-if="checkMenu('questionmanage,papermanage,examinationcenter')"> key="sub11"
@titleClick="titleClick"
v-if="checkMenu('questionmanage,papermanage,examinationcenter')"
>
<template #icon> <template #icon>
<div class="imgBox"> <div class="imgBox">
<img <img
style="width: 16px; height: 16px" style="width: 16px; height: 16px"
src="../assets/images/navleft/test.png" src="../assets/images/navleft/test.png"
/> />
</div> </div>
</template> </template>
<template #title>考试</template> <template #title>考试中心</template>
<a-menu-item key="sub11-1" v-if="checkMenu('questionmanage')"> <a-menu-item key="sub11-1" v-if="checkMenu('questionmanage')">
<span <span
:class="{ :class="{
circleActive: selectedKeys[0] === 'sub11-1' ? true : false, circleActive: selectedKeys[0] === 'sub11-1' ? true : false,
circle: selectedKeys[0] === 'sub11-1' ? false : true, circle: selectedKeys[0] === 'sub11-1' ? false : true,
}" }"
@@ -321,7 +359,7 @@
</a-menu-item> </a-menu-item>
<a-menu-item key="sub11-2" v-if="checkMenu('papermanage')"> <a-menu-item key="sub11-2" v-if="checkMenu('papermanage')">
<span <span
:class="{ :class="{
circleActive: selectedKeys[0] === 'sub11-2' ? true : false, circleActive: selectedKeys[0] === 'sub11-2' ? true : false,
circle: selectedKeys[0] === 'sub11-2' ? false : true, circle: selectedKeys[0] === 'sub11-2' ? false : true,
}" }"
@@ -330,7 +368,7 @@
</a-menu-item> </a-menu-item>
<a-menu-item key="sub11-3" v-if="checkMenu('examinationcenter')"> <a-menu-item key="sub11-3" v-if="checkMenu('examinationcenter')">
<span <span
:class="{ :class="{
circleActive: selectedKeys[0] === 'sub11-3' ? true : false, circleActive: selectedKeys[0] === 'sub11-3' ? true : false,
circle: selectedKeys[0] === 'sub11-3' ? false : true, circle: selectedKeys[0] === 'sub11-3' ? false : true,
}" }"
@@ -338,69 +376,129 @@
<router-link to="/examinationcenter">考试管理</router-link> <router-link to="/examinationcenter">考试管理</router-link>
</a-menu-item> </a-menu-item>
</a-sub-menu> </a-sub-menu>
<a-menu-item key="sub12" @titleClick="titleClick" v-if="checkMenu('casemanage')"> <a-menu-item
key="sub12"
@titleClick="titleClick"
v-if="checkMenu('casemanage')"
>
<div class="imgBox"> <div class="imgBox">
<img <img
style="width: 20px; height: 20px" style="width: 20px; height: 20px"
src="../assets/images/navleft/case.png" src="../assets/images/navleft/case.png"
/> />
</div> </div>
<router-link to="/casemanage">案例管理</router-link> <router-link to="/casemanage">案例管理</router-link>
</a-menu-item> </a-menu-item>
<a-menu-item key="sub13" @titleClick="titleClick" v-if="checkMenu('articlemanage')"> <a-menu-item
key="sub13"
@titleClick="titleClick"
v-if="checkMenu('articlemanage')"
>
<div class="imgBox"> <div class="imgBox">
<img <img
style="width: 20px; height: 20px" style="width: 20px; height: 20px"
src="../assets/images/navleft/article.png" src="../assets/images/navleft/article.png"
/> />
</div> </div>
<router-link to="/articlemanage">文章管理</router-link> <router-link to="/articlemanage">文章管理</router-link>
</a-menu-item> </a-menu-item>
<a-menu-item key="sub14" @titleClick="titleClick" v-if="checkMenu('qamanage')"> <a-menu-item
key="sub14"
@titleClick="titleClick"
v-if="checkMenu('qamanage')"
>
<div class="imgBox"> <div class="imgBox">
<img <img
style="width: 20px; height: 20px" style="width: 20px; height: 20px"
src="../assets/images/navleft/qa.png" src="../assets/images/navleft/qa.png"
/> />
</div> </div>
<router-link to="/qamanage">问答管理</router-link> <router-link to="/qamanage">问答管理</router-link>
</a-menu-item> </a-menu-item>
<a-menu-item key="sub15" @titleClick="titleClick" v-if="checkMenu('download')"> <a-menu-item
key="sub15"
@titleClick="titleClick"
v-if="checkMenu('download')"
>
<div class="imgBox"> <div class="imgBox">
<img <img
style="width: 20px; height: 20px" style="width: 20px; height: 20px"
src="../assets/images/navleft/qa.png" src="../assets/images/navleft/qa.png"
/> />
</div> </div>
<router-link to="/download">下载中心</router-link> <router-link to="/download">下载中心</router-link>
</a-menu-item> </a-menu-item>
<a-menu-item key="sub16" v-if="checkMenu('OldSystemManage')">
<div class="imgBox">
<img
style="width: 22px; height: 22px"
src="../assets/images/navleft/review.png"
/>
</div>
<router-link to="/oldsystemmanage">旧版管理员界面</router-link>
</a-menu-item>
<a-menu-item key="sub17" v-if="checkMenu('ReadingClubManage')">
<div class="imgBox">
<img
style="width: 22px; height: 22px"
src="../assets/images/navleft/review.png"
/>
</div>
<router-link to="/readingclubmanage">业务支援读书会管理</router-link>
</a-menu-item>
<a-menu-item key="sub18" v-if="checkMenu('dictmanage')">
<div class="imgBox">
<img
style="width: 22px; height: 22px"
src="../assets/images/navleft/review.png"
/>
</div>
<router-link to="/dictmanage">字典管理</router-link>
</a-menu-item>
</a-menu> </a-menu>
</div> </div>
<div <div
style="width: 100%; margin-top: 26px" style="width: 100%; margin-top: 26px"
:style="{ display: packup ? 'block' : 'none' }" :style="{ display: packup ? 'block' : 'none' }"
class="packupMenu" class="packupMenu"
> >
<a-menu <a-menu
id="dddddd" id="dddddd"
v-model:openKeys="openKeys2" v-model:openKeys="openKeys2"
v-model:selectedKeys="selectedKeys2" v-model:selectedKeys="selectedKeys2"
style="width: 100px" style="width: 100px"
mode="inline" mode="inline"
@click="handleClick" @click="handleClick"
> >
<a-menu-item key="sub10" @titleClick="titleClick" v-if="checkMenu('coursereviewedn')"> <a-menu-item
key="sub10"
@titleClick="titleClick"
v-if="checkMenu('coursereviewedn')"
>
<router-link to="/coursereviewedn">审核</router-link> <router-link to="/coursereviewedn">审核</router-link>
</a-menu-item> </a-menu-item>
<a-menu-item key="sub1" @titleClick="titleClick" v-if="checkMenu('learningpath')"> <a-menu-item
key="sub1"
@titleClick="titleClick"
v-if="checkMenu('learningpath')"
>
<router-link to="/learningpath">学习</router-link> <router-link to="/learningpath">学习</router-link>
</a-menu-item> </a-menu-item>
<a-menu-item key="sub2" @titleClick="titleClick" v-if="checkMenu('projectmanage')"> <a-menu-item
key="sub2"
@titleClick="titleClick"
v-if="checkMenu('projectmanage')"
>
<router-link to="/projectmanage">项目</router-link> <router-link to="/projectmanage">项目</router-link>
</a-menu-item> </a-menu-item>
<a-menu-item key="sub3" @titleClick="titleClick" v-if="checkMenu('coursewaremanage')"> <a-menu-item
key="sub3"
@titleClick="titleClick"
v-if="checkMenu('coursewaremanage')"
>
<router-link to="/coursewaremanage">课程</router-link> <router-link to="/coursewaremanage">课程</router-link>
</a-menu-item> </a-menu-item>
<!-- 2022-12-10注释 后面放开 --> <!-- 2022-12-10注释 后面放开 -->
@@ -408,9 +506,16 @@
<span>考试</span> <span>考试</span>
</a-menu-item> --> </a-menu-item> -->
<a-menu-item key="sub5" @titleClick="titleClick" v-if="checkMenu('researchmanage')"> <a-menu-item
key="sub5"
@titleClick="titleClick"
v-if="checkMenu('researchmanage')"
>
<router-link to="/researchmanage">评估</router-link> <router-link to="/researchmanage">评估</router-link>
</a-menu-item> </a-menu-item>
<a-menu-item key="sub7" v-if="checkMenu('AudienceManage')">
<router-link to="/audiencemanage">受众</router-link>
</a-menu-item>
<!-- 2022-12-10注释 后面放开 --> <!-- 2022-12-10注释 后面放开 -->
<!-- <a-menu-item key="sub6" @titleClick="titleClick"> <!-- <a-menu-item key="sub6" @titleClick="titleClick">
<span>报表</span> <span>报表</span>
@@ -427,31 +532,61 @@
<span>系统</span> <span>系统</span>
</a-menu-item> --> </a-menu-item> -->
<a-menu-item key="sub11" @titleClick="titleClick" v-if="checkMenu('examinationcenter')"> <a-menu-item
key="sub11"
@titleClick="titleClick"
v-if="checkMenu('examinationcenter')"
>
<router-link to="/examinationcenter">考试</router-link> <router-link to="/examinationcenter">考试</router-link>
</a-menu-item> </a-menu-item>
<a-menu-item key="sub12" @titleClick="titleClick" v-if="checkMenu('casemanage')"> <a-menu-item
key="sub12"
@titleClick="titleClick"
v-if="checkMenu('casemanage')"
>
<router-link to="/casemanage">案例</router-link> <router-link to="/casemanage">案例</router-link>
</a-menu-item> </a-menu-item>
<a-menu-item key="sub13" @titleClick="titleClick" v-if="checkMenu('articlemanage')"> <a-menu-item
key="sub13"
@titleClick="titleClick"
v-if="checkMenu('articlemanage')"
>
<router-link to="/articlemanage">文章</router-link> <router-link to="/articlemanage">文章</router-link>
</a-menu-item> </a-menu-item>
<a-menu-item key="sub14" @titleClick="titleClick" v-if="checkMenu('qamanage')"> <a-menu-item
key="sub14"
@titleClick="titleClick"
v-if="checkMenu('qamanage')"
>
<router-link to="/qamanage">问答</router-link> <router-link to="/qamanage">问答</router-link>
</a-menu-item> </a-menu-item>
<a-menu-item key="sub15" @titleClick="titleClick" v-if="checkMenu('download')"> <a-menu-item
key="sub15"
@titleClick="titleClick"
v-if="checkMenu('download')"
>
<router-link to="/download">下载</router-link> <router-link to="/download">下载</router-link>
</a-menu-item> </a-menu-item>
<a-menu-item key="sub16" v-if="checkMenu('OldSystemManage')">
<router-link to="/oldsystemmanage">旧版</router-link>
</a-menu-item>
<a-menu-item key="sub17" v-if="checkMenu('ReadingClubManage')">
<router-link to="/readingclubmanage">业务</router-link>
</a-menu-item>
<a-menu-item key="sub18" v-if="checkMenu('dictmanage')">
<router-link to="/dictmanage">字典</router-link>
</a-menu-item>
</a-menu> </a-menu>
</div> </div>
</div> </div>
</template> </template>
<script> <script>
import {reactive, toRefs, onMounted, onUnmounted, watch} from "vue"; import { reactive, toRefs, onMounted, onUnmounted, watch } from "vue";
import {useRoute} from "vue-router"; import { useRoute } from "vue-router";
import {useStore} from "vuex"; import { useStore } from "vuex";
import {checkMenu} from "@/utils/utils"; import { checkMenu } from "@/utils/utils";
export default { export default {
name: "NavLeft", name: "NavLeft",
@@ -476,19 +611,22 @@ export default {
"sub13", "sub13",
"sub14", "sub14",
"sub15", "sub15",
"sub16",
"sub17",
"sub18",
], ],
openKeys: localStorage.getItem("openKeys") openKeys: localStorage.getItem("openKeys")
? JSON.parse(localStorage.getItem("openKeys")) ? JSON.parse(localStorage.getItem("openKeys"))
: ["sub1"], //默认打开以及打开的一级导航 : ["sub1"], //默认打开以及打开的一级导航
selectedKeys: localStorage.getItem("selectedKeys") selectedKeys: localStorage.getItem("selectedKeys")
? JSON.parse(localStorage.getItem("selectedKeys")) ? JSON.parse(localStorage.getItem("selectedKeys"))
: ["sub1"], //默认选择以及选择的二级导航 : ["sub1"], //默认选择以及选择的二级导航
openKeys2: localStorage.getItem("openKeys") openKeys2: localStorage.getItem("openKeys")
? JSON.parse(localStorage.getItem("openKeys")) ? JSON.parse(localStorage.getItem("openKeys"))
: ["sub1"], //默认打开以及打开的一级导航 : ["sub1"], //默认打开以及打开的一级导航
selectedKeys2: localStorage.getItem("openKeys") selectedKeys2: localStorage.getItem("openKeys")
? JSON.parse(localStorage.getItem("openKeys")) ? JSON.parse(localStorage.getItem("openKeys"))
: ["sub1"], //默认选择以及选择的二级导航 : ["sub1"], //默认选择以及选择的二级导航
keysList: [ keysList: [
{ {
@@ -643,6 +781,30 @@ export default {
selectedKeys: "sub15", selectedKeys: "sub15",
pagename: "下载中心", pagename: "下载中心",
}, },
{
href: "/audiencemanage",
openKeys: "sub7",
selectedKeys: "sub7",
pagename: "受众管理",
},
{
href: "/oldsystemmanage",
openKeys: "sub16",
selectedKeys: "sub16",
pagename: "旧版管理员界面",
},
{
href: "/readingclubmanage",
openKeys: "sub17",
selectedKeys: "sub17",
pagename: "业务支援读书会管理",
},
{
href: "/dictmanage",
openKeys: "sub18",
selectedKeys: "sub18",
pagename: "字典管理",
},
], ],
}); });
@@ -650,7 +812,7 @@ export default {
const onOpenChange = (openKeys) => { const onOpenChange = (openKeys) => {
const latestOpenKey = openKeys.find( const latestOpenKey = openKeys.find(
(key) => state.openKeys.indexOf(key) === -1 (key) => state.openKeys.indexOf(key) === -1
); );
if (state.rootSubmenuKeys.indexOf(latestOpenKey) === -1) { if (state.rootSubmenuKeys.indexOf(latestOpenKey) === -1) {
state.openKeys = openKeys; state.openKeys = openKeys;
@@ -665,8 +827,8 @@ export default {
if (e.key === value.selectedKeys) { if (e.key === value.selectedKeys) {
localStorage.setItem("openKeys", JSON.stringify([value.openKeys])); localStorage.setItem("openKeys", JSON.stringify([value.openKeys]));
localStorage.setItem( localStorage.setItem(
"selectedKeys", "selectedKeys",
JSON.stringify([value.selectedKeys]) JSON.stringify([value.selectedKeys])
); );
state.openKeys = [value.openKeys]; state.openKeys = [value.openKeys];
state.selectedKeys = [value.selectedKeys]; state.selectedKeys = [value.selectedKeys];
@@ -678,70 +840,70 @@ export default {
const route = useRoute(); const route = useRoute();
watch( watch(
() => route.fullPath, () => route.fullPath,
(n) => { (n) => {
console.log("监听路由", n, store.state.openpages, state.keysList); console.log("监听路由", n, store.state.openpages, state.keysList);
// console.log("new:" + n.toLowerCase() + ",old:" + o); // console.log("new:" + n.toLowerCase() + ",old:" + o);
let arr = state.keysList; let arr = state.keysList;
arr.map((value) => { arr.map((value) => {
if (n.toLowerCase() === value.href) { if (n.toLowerCase() === value.href) {
localStorage.setItem("openKeys", JSON.stringify([value.openKeys])); localStorage.setItem("openKeys", JSON.stringify([value.openKeys]));
localStorage.setItem( localStorage.setItem(
"selectedKeys", "selectedKeys",
JSON.stringify([value.selectedKeys]) JSON.stringify([value.selectedKeys])
); );
state.openKeys = [value.openKeys]; state.openKeys = [value.openKeys];
state.selectedKeys = [value.selectedKeys]; state.selectedKeys = [value.selectedKeys];
state.openKeys2 = [value.openKeys]; state.openKeys2 = [value.openKeys];
state.selectedKeys2 = [value.openKeys]; state.selectedKeys2 = [value.openKeys];
} }
});
let openpages = store.state.openpages;
if (openpages.length === 0) {
let pagename = state.keysList.filter((a) => {
return a.href === n.toLowerCase();
}); });
let openpages = store.state.openpages; if (pagename && pagename.length !== 0) {
if (openpages.length === 0) { let obj = {
let pagename = state.keysList.filter((a) => { pagename: pagename[0].pagename,
return a.href === n.toLowerCase(); href: n.toLowerCase(),
}); active: true,
if (pagename && pagename.length !== 0) { };
let obj = { openpages.push(obj);
pagename: pagename[0].pagename, }
href: n.toLowerCase(), } else {
active: true, for (let i = 0; i < openpages.length; i++) {
}; openpages[i].active = false;
openpages.push(obj); }
} for (let i = 0; i < openpages.length; i++) {
} else { openpages[i].active = false;
for (let i = 0; i < openpages.length; i++) { if (n.toLowerCase() === openpages[i].href) {
openpages[i].active = false; console.log("已存在", openpages[i]);
} openpages[i].active = true;
for (let i = 0; i < openpages.length; i++) { break;
openpages[i].active = false; } else {
if (n.toLowerCase() === openpages[i].href) { if (i === openpages.length - 1) {
console.log("已存在", openpages[i]); let pagename = state.keysList.filter((a) => {
openpages[i].active = true; return a.href === n.toLowerCase();
break; });
} else { if (pagename && pagename.length !== 0) {
if (i === openpages.length - 1) { let obj = {
let pagename = state.keysList.filter((a) => { pagename: pagename[0].pagename,
return a.href === n.toLowerCase(); href: n.toLowerCase(),
}); active: true,
if (pagename && pagename.length !== 0) { };
let obj = { openpages.push(obj);
pagename: pagename[0].pagename,
href: n.toLowerCase(),
active: true,
};
openpages.push(obj);
}
} }
} }
} }
} }
localStorage.setItem("openpages", JSON.stringify(openpages));
store.commit("chengeOpenpages", openpages);
// store.getters.chengeOpenpages(openpages)
} }
localStorage.setItem("openpages", JSON.stringify(openpages));
store.commit("chengeOpenpages", openpages);
// store.getters.chengeOpenpages(openpages)
}
); );
const packUp = () => { const packUp = () => {
state.packup = !state.packup; state.packup = !state.packup;

View File

@@ -46,7 +46,7 @@
</template> </template>
<script setup> <script setup>
import {computed, reactive} from "vue"; import {computed, reactive} from "vue";
import {studentUrl} from "@/api/method"; import {studentUrl,teacherUrl} from "@/api/method";
import router from "@/router"; import router from "@/router";
import {useStore, createStore} from "vuex"; import {useStore, createStore} from "vuex";
@@ -67,6 +67,11 @@ const state = reactive({
name: "学员", name: "学员",
go: studentUrl, go: studentUrl,
}, },
{
id:3,
name: "教师",
go: teacherUrl,
}
], ],
visible: false, visible: false,
}); });
@@ -124,7 +129,7 @@ const logOut = () => {
.roleItems { .roleItems {
width: 109px; width: 109px;
height: 90px; height: 120px;
padding-top: 10px; padding-top: 10px;
background: #ffffff; background: #ffffff;
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.21); box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.21);

View File

@@ -940,6 +940,7 @@ export default {
}; };
const signQR = () => { const signQR = () => {
console.log("props.datasource", props.datasource); console.log("props.datasource", props.datasource);
console.log("是项目还是路径图啊")
state.codevisible = true; state.codevisible = true;
state.codeInfo = { state.codeInfo = {
title: "【签到】二维码", title: "【签到】二维码",
@@ -948,7 +949,7 @@ export default {
process.env.VUE_APP_BASE_API + process.env.VUE_APP_BASE_API +
`/admin/student/studentSign?taskId=${props.datasource.id}&taskType=${ `/admin/student/studentSign?taskId=${props.datasource.id}&taskType=${
props.datasource.type props.datasource.type
}&type=${1}`, }&type=${props.datasource.routerId?2:1}`,
}; };
console.log("codeInfo", state.codeInfo); console.log("codeInfo", state.codeInfo);
state.codeIndex = 0; state.codeIndex = 0;

View File

@@ -219,7 +219,7 @@
</div> </div>
<div class="btnbox"> <div class="btnbox">
<a-input v-model:value="formData.source" <a-input v-model:value="formData.source"
style="width: 400px; height: 40px; border-radius: 8px" :disabled="taskIndex >= 0 && isEdit" style="width: 400px; height: 40px; border-radius: 8px"
placeholder="请输入数据来源" show-count :maxlength="420" /> placeholder="请输入数据来源" show-count :maxlength="420" />
</div> </div>
</div> </div>
@@ -228,7 +228,7 @@
<span style="margin-right: 3px">考试说明</span> <span style="margin-right: 3px">考试说明</span>
</div> </div>
<div class="textarea"> <div class="textarea">
<a-textarea v-model:value="formData.externalExplain" placeholder="请输入考试说明" allow-clear show-count :disabled="taskIndex >= 0 && isEdit" <a-textarea v-model:value="formData.examinationExplain" placeholder="请输入考试说明" allow-clear show-count
:maxlength="200" :rows="6" /> :maxlength="200" :rows="6" />
</div> </div>
</div> </div>
@@ -266,7 +266,8 @@ const initValue = {
showAnalysis: 2, showAnalysis: 2,
scoringModel: 2, scoringModel: 2,
questionArrangement: 4, questionArrangement: 4,
externalExplain: "" externalExplain: "",
examinationExplain: ""
} }
const formData = ref(initValue) const formData = ref(initValue)
const innerRule = { const innerRule = {

View File

@@ -31,6 +31,8 @@
> >
{{items.optionName}} {{items.optionName}}
</a-radio> </a-radio>
<br/>
<img v-if="items.optionPictureAddress" :src="items.optionPictureAddress" alt="" srcset="" style="width: 100px; height:100px;margin-top: 5px;margin-bottom: 5px;">
</div> </div>
</div> </div>
</a-radio-group> </a-radio-group>
@@ -151,9 +153,8 @@ export default {
} }
} }
} }
console.log(choiceArr)
state.currentChoice = choiceArr state.currentChoice = choiceArr
}).catch(err=>{ }).catch(err=>{
console.log(err) console.log(err)
}) })

View File

@@ -117,13 +117,22 @@
</div> </div>
<div class="alreadyclass"> <div class="alreadyclass">
<div class="alimg"> <div class="alimg">
<img :src=" <!-- <img :src="
item.complete === '已完成' item.complete === '已完成'
? require('../../assets/images/studentimg/complete.png') ? require('../../assets/images/studentimg/complete.png')
: require('../../assets/images/studentimg/notice.png') : require('../../assets/images/studentimg/notice.png')
"/> "/>
</div> </div>
<div class="altext">{{ item.complete }}</div> <div class="altext">{{ item.complete }}</div> -->
<img
:src="
item.status === 1
? require('../../assets/images/studentimg/complete.png')
: require('../../assets/images/studentimg/notice.png')
"
/>
</div>
<div class="altext">{{ item.status === 0 ? "进行中" : item.status === 1 ? "已完成" : "未开始" }}</div>
</div> </div>
</div> </div>
</a-collapse-panel> </a-collapse-panel>

View File

@@ -8,7 +8,7 @@
> >
<div class="drawerMain"> <div class="drawerMain">
<div class="header"> <div class="header">
<div class="headerTitle">学员获取详情</div> <div class="headerTitle">学员获取详情1</div>
<img <img
style="width: 29px; height: 29px; cursor: pointer" style="width: 29px; height: 29px; cursor: pointer"
src="../../assets/images/basicinfo/close.png" src="../../assets/images/basicinfo/close.png"
@@ -26,7 +26,7 @@
@expand="expandTable" @expand="expandTable"
:pagination="false" :pagination="false"
/> />
<div class="pa"> <div class="pa">
<a-pagination <a-pagination
v-if="tableDataTotal > 10" v-if="tableDataTotal > 10"
@@ -50,7 +50,7 @@
</div> </div>
</a-drawer> </a-drawer>
</template> </template>
<script> <script>
import { toRefs, reactive } from "vue"; import { toRefs, reactive } from "vue";
import { studentScoreList } from "../../api/indexProjStu"; import { studentScoreList } from "../../api/indexProjStu";
@@ -178,7 +178,7 @@ export default {
}, },
}; };
</script> </script>
<style lang="scss" > <style lang="scss" >
.StuScore { .StuScore {
.drawerMain { .drawerMain {
@@ -292,4 +292,4 @@ export default {
} }
} }
} }
</style> </style>

View File

@@ -41,17 +41,22 @@
</div> </div>
</div> </div>
<div> <div>
<div class="box1" v-for="(itteems, indexss) in values.assessmentSingleChoiceVoList" style="margin-left: 55px; margin-top: 20px" :key="indexss"> <div class="box1" v-for="(itteems, indexss) in values.assessmentSingleChoiceVoList" style="margin-left: 55px; margin-top: 20px; flex-direction:column; justify-content:flex-start;align-items:flex-start;" :key="indexss">
<div class="asstype">选择{{indexss+1}}</div> <div style="display:flex;">
<div style="display:flex;justify-content:center;align-items:center;"> <div class="asstype">选择{{indexss+1}}</div>
<div v-if="itteems.select" style="display:flex;justify-content:center;align-items:center;width:16px;height:16px;border-radius:8px;border:1px solid rgba(151, 151, 151, 0.29);margin-right: 8px;"> <div style="display:flex;justify-content:center;align-items:center;">
<div style="width:8px;height:8px;border-radius:4px;background-color:#409eff;"></div> <div v-if="itteems.select" style="display:flex;justify-content:center;align-items:center;width:16px;height:16px;border-radius:8px;border:1px solid rgba(151, 151, 151, 0.29);margin-right: 8px;">
<div style="width:8px;height:8px;border-radius:4px;background-color:#409eff;"></div>
</div>
<div v-else style="width:16px;height:16px;border-radius:8px;border:1px solid rgba(151, 151, 151, 0.29);margin-right: 8px;"></div>
{{itteems.singleOptionName}}
</div> </div>
<div v-else style="width:16px;height:16px;border-radius:8px;border:1px solid rgba(151, 151, 151, 0.29);margin-right: 8px;"></div>
{{itteems.singleOptionName}}
</div> </div>
<img v-if="itteems?.singleOptionPictureAddress" :src="itteems?.singleOptionPictureAddress" alt="" srcset="" style="width: 140px;height:140px;margin-top:5px;">
<div v-else-if="isExistImg(values.assessmentSingleChoiceVoList, 1)" style="width: 140px;height:140px;margin-top:5px;"></div>
<!-- <a-radio :value="indexs" defaultValue>{{iitem.singleOptionName}}</a-radio> --> <!-- <a-radio :value="indexs" defaultValue>{{iitem.singleOptionName}}</a-radio> -->
</div> </div>
</div> </div>
<div style="margin-bottom:30px;"></div> <div style="margin-bottom:30px;"></div>
</div> </div>
@@ -68,15 +73,19 @@
</div> </div>
</div> </div>
<div> <div>
<div class="box1" v-for="(itteems, indexss) in values.multipleChoiceVoList" style="margin-left: 55px; margin-top: 20px" :key="indexss"> <div class="box1" v-for="(itteems, indexss) in values.multipleChoiceVoList" style="margin-left: 55px; margin-top: 20px; flex-direction:column; justify-content:flex-start;align-items:flex-start;" :key="indexss">
<div class="asstype">选择{{indexss+1}}</div> <div style="display:flex;">
<div style="display:flex;justify-content:center;align-items:center;"> <div class="asstype">选择{{indexss+1}}</div>
<div v-if="itteems.select" style="display:flex;justify-content:center;align-items:center;width:16px;height:16px;border-radius:8px;border:1px solid rgba(151, 151, 151, 0.29);margin-right: 8px;"> <div style="display:flex;justify-content:center;align-items:center;">
<div style="width:8px;height:8px;border-radius:4px;background-color:#409eff;"></div> <div v-if="itteems.select" style="display:flex;justify-content:center;align-items:center;width:16px;height:16px;border-radius:8px;border:1px solid rgba(151, 151, 151, 0.29);margin-right: 8px;">
<div style="width:8px;height:8px;border-radius:4px;background-color:#409eff;"></div>
</div>
<div v-else style="width:16px;height:16px;border-radius:8px;border:1px solid rgba(151, 151, 151, 0.29);margin-right: 8px;"></div>
{{itteems.multipleOptionName}}
</div> </div>
<div v-else style="width:16px;height:16px;border-radius:8px;border:1px solid rgba(151, 151, 151, 0.29);margin-right: 8px;"></div>
{{itteems.multipleOptionName}}
</div> </div>
<img v-if="itteems?.multipleOptionPictureAddress" :src="itteems?.multipleOptionPictureAddress" alt="" srcset="" style="width: 140px;height:140px;margin-top:5px;">
<div v-else-if="isExistImg(values.multipleChoiceVoList, 2)" style="width: 140px;height:140px;margin-top:5px;"></div>
<!-- <a-radio :value="indexs" defaultValue>{{iitem.singleOptionName}}</a-radio> --> <!-- <a-radio :value="indexs" defaultValue>{{iitem.singleOptionName}}</a-radio> -->
</div> </div>
</div> </div>
@@ -217,10 +226,31 @@ export default {
} }
}; };
// 判断当前题目中是否有的选项有图片有的没有
const isExistImg = (data, index) => {
let exist = false;
data.forEach((i,n)=>{
console.log(i,n)
if(index==1){
if(i.singleOptionPictureAddress){
exist = true;
return exist;
}
}else{
if(i.multipleOptionPictureAddress){
exist = true;
return exist;
}
}
})
return exist;
}
return { return {
...toRefs(state), ...toRefs(state),
afterVisibleChange, afterVisibleChange,
closeDrawer, closeDrawer,
isExistImg
// change, // change,
}; };
}, },

View File

@@ -370,10 +370,10 @@ export default {
'courseId': props.datasource.courseId,//任务的Id 'courseId': props.datasource.courseId,//任务的Id
'courseName': props.title,//任务的名称 'courseName': props.title,//任务的名称
'logo': '1',//项目或径的标识 1-项目 2-路径图 3面授课 'logo': '1',//项目或径的标识 1-项目 2-路径图 3面授课
'routerTaskId': props.datasource.routerId,//任务的routerTaskld或projectTaskld 'routerTaskId': props.datasource.projectId,//任务的routerTaskld或projectTaskld
'targetId': props.datasource.routerId,//路径图的就是routerId,项目的是projectId;根据这张图来看的话 'targetId': props.datasource.projectId,//路径图的就是routerId,项目的是projectId;根据这张图来看的话
'taskType': props.datasource.type,//催促的任务的类型 'taskType': props.datasource.type,//催促的任务的类型
'chapterId': props.datasource.chapterId,//阶段或关卡Id 'chapterId': props.datasource.stageId,//阶段或关卡Id
}; };
batchSendMessage(obj).then(res => { batchSendMessage(obj).then(res => {
console.log(res) console.log(res)

View File

@@ -366,10 +366,10 @@
'courseId': props.datasource.courseId,//任务的Id 'courseId': props.datasource.courseId,//任务的Id
'courseName': props.title,//任务的名称 'courseName': props.title,//任务的名称
'logo': '1',//项目或径的标识 1-项目 2-路径图 3面授课 'logo': '1',//项目或径的标识 1-项目 2-路径图 3面授课
'routerTaskId': props.datasource.routerId,//任务的routerTaskld或projectTaskld 'routerTaskId': props.datasource.projectId,//任务的routerTaskld或projectTaskld
'targetId': props.datasource.routerId,//路径图的就是routerId,项目的是projectId;根据这张图来看的话 'targetId': props.datasource.projectId,//路径图的就是routerId,项目的是projectId;根据这张图来看的话
'taskType': props.datasource.type,//催促的任务的类型 'taskType': props.datasource.type,//催促的任务的类型
'chapterId': props.datasource.chapterId,//阶段或关卡Id 'chapterId': props.datasource.stageId,//阶段或关卡Id
}; };
batchSendMessage(obj).then(res => { batchSendMessage(obj).then(res => {
message.success("催促" + props.title + "成功"); message.success("催促" + props.title + "成功");

View File

@@ -500,7 +500,6 @@ export default {
// 导出数据 // 导出数据
function exportTaskStu() { function exportTaskStu() {
debugger
if(props.datasource.type==1){ if(props.datasource.type==1){
{/* 在线课导出 */} {/* 在线课导出 */}
window.open(`${process.env.VUE_APP_BASE_API}/admin/online/manage/exportOnline?chapterId=${props.datasource.chapterId}&type=${2}&targetId=${props.datasource.routerId}&taskId=${props.datasource.courseId}`) window.open(`${process.env.VUE_APP_BASE_API}/admin/online/manage/exportOnline?chapterId=${props.datasource.chapterId}&type=${2}&targetId=${props.datasource.routerId}&taskId=${props.datasource.courseId}`)

View File

@@ -2,7 +2,7 @@
* @Author: lixg lixg@dongwu-inc.com * @Author: lixg lixg@dongwu-inc.com
* @Date: 2023-02-23 14:57:21 * @Date: 2023-02-23 14:57:21
* @LastEditors: lixg lixg@dongwu-inc.com * @LastEditors: lixg lixg@dongwu-inc.com
* @LastEditTime: 2023-02-24 22:54:03 * @LastEditTime: 2023-03-07 17:30:12
* @FilePath: /fe-manage/src/components/project/OrgClassCheck.vue * @FilePath: /fe-manage/src/components/project/OrgClassCheck.vue
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
--> -->

View File

@@ -692,7 +692,6 @@ const deleteId = ref(null);
const deleteTargetId = ref(null); const deleteTargetId = ref(null);
const deleteType = ref(null); const deleteType = ref(null);
function del(id, row) { function del(id, row) {
debugger
if (row.isLeader === "1") { if (row.isLeader === "1") {
return message.warning("" + row.name + "是小组长,请勿删除!"); return message.warning("" + row.name + "是小组长,请勿删除!");
} }

View File

@@ -31,10 +31,16 @@ export function traverseArr(arr, traverseObj, saveOld = false) {
const admin = [5, 6, 8, 9, 11, 12]; const admin = [5, 6, 8, 9, 11, 12];
//检查 管理权和归属权 //检查 管理权和归属权
export function checkPer(per) { export function checkPer(per,createId) {
if(createId && store?.state?.userInfo?.id === createId){
return true;
}
if (store?.state?.userInfo?.roleList.some(t => t.code === "system-admin")) { if (store?.state?.userInfo?.roleList.some(t => t.code === "system-admin")) {
return true; return true;
} }
if (store?.state?.userInfo?.isHrbp) {
return true;
}
if (!per) { if (!per) {
return false; return false;
} }

View File

@@ -1251,6 +1251,7 @@
:id="offcoursePlanId" :id="offcoursePlanId"
:columns="stuColumns" :columns="stuColumns"
:visable="sm_hs" :visable="sm_hs"
:permissions="permissions"
:isgetStudent="isgetStudent" :isgetStudent="isgetStudent"
> >
<template #extension="{ data: { record } }"> <template #extension="{ data: { record } }">
@@ -2154,6 +2155,8 @@ export default defineComponent({
const sysTypeOptions = computed(() => store.state.content_type); const sysTypeOptions = computed(() => store.state.content_type);
const state = reactive({ const state = reactive({
permissions:null,
createId:null,
workInfo: {}, workInfo: {},
examInfo: {}, examInfo: {},
tableLoading: false, tableLoading: false,
@@ -3839,11 +3842,7 @@ export default defineComponent({
key: "8", key: "8",
align: "center", align: "center",
customRender: ({ record }) => customRender: ({ record }) =>
itm.courseScore === -1 record.assessmentStatus?"已评估" : "未评估",
? "-"
: record.assessmentStatus
? "已评估"
: "未评估",
}, },
{ {
title: "评分", title: "评分",
@@ -3854,7 +3853,7 @@ export default defineComponent({
customRender: ({ record }) => { customRender: ({ record }) => {
return ( return (
<div class="racona"> <div class="racona">
{record.studentScore !== -1 ? record.studentScore : "-"} {record.assessmentScore || "-"}
</div> </div>
); );
// switch (String(record.status)) { // switch (String(record.status)) {
@@ -4554,8 +4553,8 @@ export default defineComponent({
} }
state.offcourseId = item.id; state.offcourseId = item.id;
state.newCourseName = item.name; state.newCourseName = item.name;
state.permissions = item.permissions;
getTableDate3(); getTableDate3();
state.stm_hs = true; state.stm_hs = true;
}; };
@@ -4579,12 +4578,15 @@ export default defineComponent({
console.log(state.kk_inputV1); console.log(state.kk_inputV1);
console.log(state.kk_inputV2); console.log(state.kk_inputV2);
console.log(state.selectTime); console.log(state.selectTime);
getTableDate();
getTableDate3(); getTableDate3();
}; };
const handleRestTable = () => { const handleRestTable = () => {
debugger
state.kk_inputV1 = ""; state.kk_inputV1 = "";
state.kk_inputV2 = ""; state.kk_inputV2 = "";
state.selectTime = ""; state.selectTime = "";
getTableDate();
getTableDate3(); getTableDate3();
}; };
@@ -4660,6 +4662,8 @@ export default defineComponent({
state.om_1 = true; state.om_1 = true;
state.ft_1 = true; state.ft_1 = true;
state.manageStuLoading = true; state.manageStuLoading = true;
state.permissions = item.permissions;
state.createId = item.createId;
console.log(787666, item); console.log(787666, item);
state.faceClassification = item.contentTxt; state.faceClassification = item.contentTxt;
state.faceStatus = item.status; state.faceStatus = item.status;

View File

@@ -86,16 +86,29 @@
{{ qdms_inputV2.length }}/50 {{ qdms_inputV2.length }}/50
</span> </span>
</div> --> </div> -->
<div> <div
<OrgClassCheck v-if="orgSelectNames"
v-model:value="orgSelect" style="
v-model:name="orgSelectName" margin-bottom: 10px;
:disabled="true" height: 27px;
></OrgClassCheck> line-height: 27px;
margin-left: 10px;
font-weight: 450;
"
>
<span
v-for="(i, k) in orgSelectNames"
:key="k"
style="margin-right: 20px"
>{{ i }}</span
>
</div> </div>
<div style="margin-top: 10px"> <div
style="margin-bottom: 10px"
v-if="selectJobId.length !== 0"
>
<a-select <a-select
v-model:value="selectJobId" v-model:value="selectJobId" v-if="selectJobId.length > 0"
mode="multiple" mode="multiple"
style="width: 440px; min-height: 40px" style="width: 440px; min-height: 40px"
placeholder="请选择岗位" placeholder="请选择岗位"
@@ -109,9 +122,9 @@
disabled disabled
></a-select> ></a-select>
</div> </div>
<div style="margin-top: 10px"> <div v-if="selectBandId.length !== 0">
<a-select <a-select
v-model:value="selectBandId" v-model:value="selectBandId" v-if="selectBandId.length > 0"
mode="multiple" mode="multiple"
style="width: 440px; min-height: 40px" style="width: 440px; min-height: 40px"
placeholder="请选择Band" placeholder="请选择Band"
@@ -344,7 +357,7 @@
<script> <script>
import { reactive, toRefs, defineComponent, watch, computed } from "vue"; import { reactive, toRefs, defineComponent, watch, computed } from "vue";
import { useStore } from "vuex"; import { useStore } from "vuex";
import OrgClassCheck from "@/components/project/OrgClassCheck"; // import OrgClassCheck from "@/components/project/OrgClassCheck";
import OrgClass from "@/components/project/OrgClass"; import OrgClass from "@/components/project/OrgClass";
import { detail } from "@/api/indexCourse"; import { detail } from "@/api/indexCourse";
export default defineComponent({ export default defineComponent({
@@ -359,7 +372,7 @@ export default defineComponent({
}, },
}, },
components: { components: {
OrgClassCheck, // OrgClassCheck,
OrgClass, OrgClass,
}, },
setup(props, { emit }) { setup(props, { emit }) {
@@ -387,6 +400,7 @@ export default defineComponent({
sourceBelongId: [], sourceBelongId: [],
sourceBelongName: [], sourceBelongName: [],
sourceBelongFullName: [], sourceBelongFullName: [],
orgSelectNames: "",
}); });
const sysTypeOptions = computed(() => store.state.content_type); const sysTypeOptions = computed(() => store.state.content_type);
@@ -411,6 +425,7 @@ export default defineComponent({
let item = res.data.data; let item = res.data.data;
if (item.jobTypeIds) { if (item.jobTypeIds) {
state.selectJobId = item.jobTypeIds.split(","); state.selectJobId = item.jobTypeIds.split(",");
console.log("selectJobId" + JSON.stringify(state.selectJobId));
} }
if (item.bandIds) { if (item.bandIds) {
state.selectBandId = item.bandIds.split(","); state.selectBandId = item.bandIds.split(",");
@@ -434,6 +449,7 @@ export default defineComponent({
}); });
console.log("arrObj-------------", arrObj); console.log("arrObj-------------", arrObj);
state.orgSelect = arrObj; state.orgSelect = arrObj;
state.orgSelectNames = orgSelectNames;
} }
} }
}); });
@@ -474,6 +490,19 @@ export default defineComponent({
const handleCancel = () => { const handleCancel = () => {
console.log("关闭"); console.log("关闭");
emit("cancel"); emit("cancel");
//目标任务
state.orgSelect = [];
state.orgSelectName = [];
state.orgSelectFullName = [];
state.selectJobName = [];
state.selectJobId = [];
state.selectBandName = [];
state.selectBandId = [];
//资源归属
state.sourceBelongId = [];
state.sourceBelongName = [];
state.sourceBelongFullName = [];
state.orgSelectNames = "";
}; };
function openDown(link) { function openDown(link) {

View File

@@ -17,7 +17,7 @@
src="@/assets/images/basicinfo/add.png" src="@/assets/images/basicinfo/add.png"
/> />
<span v-if="ft_eidt" class="headerLeftText">编辑面授课</span> <span v-if="ft_eidt" class="headerLeftText">编辑面授课</span>
<span v-else class="headerLeftText">新建面授课</span> <span v-else class="headerLeftText"></span>
</div> </div>
<div style="margin-right: 57px; cursor: pointer"> <div style="margin-right: 57px; cursor: pointer">
<img <img
@@ -827,11 +827,11 @@ export default defineComponent({
//保存面授课 //保存面授课
const handlePush = async (param) => { const handlePush = async (param) => {
console.log( console.log(
"组织、岗位、Band、资源归属选择", "组织、岗位、Band、资源归属选择" + JSON.stringify(state)
state.orgSelect, // state.orgSelect,
state.selectJobId, // state.selectJobId,
state.selectBandId, // state.selectBandId,
state.sourceBelongId // state.sourceBelongId
); );
let files = ""; let files = "";
if (state.imgList.length) { if (state.imgList.length) {
@@ -841,8 +841,8 @@ export default defineComponent({
} }
files = files.slice(0, files.length - 1); files = files.slice(0, files.length - 1);
let orgSelectIds = []; let orgSelectIds = "";
let orgSelectNames = []; let orgSelectNames = "";
if (state.orgSelect && state.orgSelect.length) { if (state.orgSelect && state.orgSelect.length) {
state.orgSelect.forEach((item) => { state.orgSelect.forEach((item) => {
orgSelectIds += item.value + ","; orgSelectIds += item.value + ",";

View File

@@ -113,12 +113,12 @@
type="link" type="link"
>编辑</a-button >编辑</a-button
> >
<a-button <!-- <a-button
v-if="record.state === '已发布' && checkPer(record.permissions)" v-if="record.state === '已发布' && checkPer(record.permissions)"
@click="getLearnPathInfo(record.id)" @click="getLearnPathInfo(record.id)"
type="link" type="link"
>编辑</a-button >编辑</a-button
> > -->
<a-button @click="manage(record.id)" type="link">管理</a-button> <a-button @click="manage(record.id)" type="link">管理</a-button>
<DropDown v-if="checkPer(record.permissions)" value="授权"> <DropDown v-if="checkPer(record.permissions)" value="授权">
<OwnerTableModelStudent <OwnerTableModelStudent

View File

@@ -19,7 +19,7 @@
<div v-if="action == 1" class="line"></div> <div v-if="action == 1" class="line"></div>
<div <div
class="pubIcon" class="pubIcon"
v-if="(action == 1 || action == 0) && checkPer(permissions)" v-if="(action == 1 || action == 0) && checkPer(permissions,createId)"
@click="pubIcon(action)" @click="pubIcon(action)"
> >
<img class="img2" src="../../assets/images/leveladd/pub.png" /> <img class="img2" src="../../assets/images/leveladd/pub.png" />
@@ -53,7 +53,7 @@
<div class="onerow"> <div class="onerow">
<div class="taskmain">快速创建路径图详情</div> <div class="taskmain">快速创建路径图详情</div>
</div> </div>
<div class="second" v-if="checkPer(permissions)"> <div class="second" v-if="checkPer(permissions,createId)">
<div @click="totask"> <div @click="totask">
<div <div
class="taskbox" class="taskbox"
@@ -331,7 +331,7 @@
<router-link <router-link
:to="{ path: '/leveladddetail', query: { routerId: routerId } }" :to="{ path: '/leveladddetail', query: { routerId: routerId } }"
class="editright" class="editright"
v-if="checkPer(permissions)" v-if="checkPer(permissions,createId)"
> >
<img <img
class="editimg" class="editimg"
@@ -578,7 +578,7 @@
<a-button <a-button
type="link" type="link"
@click="setLevels(record)" @click="setLevels(record)"
v-if="checkPer(permissions)" v-if="checkPer(permissions,createId)"
>调整</a-button >调整</a-button
> >
</template> </template>
@@ -601,7 +601,7 @@
class="oneedi" class="oneedi"
@click="showbtn" @click="showbtn"
v-show="twobtn" v-show="twobtn"
v-if="checkPer(permissions)" v-if="checkPer(permissions,createId)"
> >
编辑 编辑
</div> </div>
@@ -692,7 +692,7 @@
</div> </div>
</a-tab-pane> </a-tab-pane>
<a-tab-pane key="2" tab="共享文档" v-if="checkPer(permissions)"> <a-tab-pane key="2" tab="共享文档" v-if="checkPer(permissions,createId)">
<div class="sametab"> <div class="sametab">
<div class="Gcon"> <div class="Gcon">
<div class="pad"></div> <div class="pad"></div>
@@ -1424,6 +1424,7 @@ export default {
const stuRef = ref(); const stuRef = ref();
// const store = useStore(); // const store = useStore();
const state = reactive({ const state = reactive({
createId:null,
permissions: "", permissions: "",
hasTask: false, hasTask: false,
stage: [], stage: [],
@@ -2289,6 +2290,7 @@ export default {
.then((res) => { .then((res) => {
console.log("router-list", res); console.log("router-list", res);
state.fileList = JSON.parse(res.data.data.routerInfo.attach); state.fileList = JSON.parse(res.data.data.routerInfo.attach);
state.createId = res.data.data.routerInfo.createId;
state.permissions = res.data.data.routerInfo.permissions; state.permissions = res.data.data.routerInfo.permissions;
console.log("asdasdasd-------->", state.fileList); console.log("asdasdasd-------->", state.fileList);
state.docChecked = state.docChecked =

View File

@@ -199,7 +199,7 @@
>结束</a-button >结束</a-button
> >
<a-button <a-button
v-if="record.status !== -1 && record.type === 3" v-if="record.status == -1"
@click="showBackFinashModal(record.id)" @click="showBackFinashModal(record.id)"
type="link" type="link"
>撤回</a-button >撤回</a-button

View File

@@ -826,7 +826,7 @@
> >
<div style="width: 90%"> <div style="width: 90%">
<div class="grouptitle"> <div class="grouptitle">
<div class="goodgruop">{{ item.groupName }}</div> <div class="goodgruop" :title="item.groupName" >{{ item.groupName }}</div>
<div class="more"> <div class="more">
<span <span
style="color: rgba(0, 0, 0, 0.45); cursor: pointer" style="color: rgba(0, 0, 0, 0.45); cursor: pointer"
@@ -846,7 +846,7 @@
<div class="grocenter"> <div class="grocenter">
<div class="leader1">进度</div> <div class="leader1">进度</div>
<a-progress <a-progress
:percent="(item.completeRatio || 0) * 100" :percent="Math.round((item.completeRatio || 0) * 100)"
/> />
</div> </div>
<div <div
@@ -3091,10 +3091,13 @@ export default {
state.isEdit = isEdit; state.isEdit = isEdit;
state.stugroup = true; state.stugroup = true;
state.groupInfo = item || {}; state.groupInfo = item || {};
state.groupMemberCountContrast = item.groupMemberCount; if (isEdit) {
state.groupMemberCountContrast = item.groupMemberCount;
}
}; };
const closeModal2 = () => { const closeModal2 = () => {
state.stugroup = false; state.stugroup = false;
state.buttonLoading = false
state.groupInfo = {}; state.groupInfo = {};
state.groupMemberCountContrast = null; state.groupMemberCountContrast = null;
getGroup(); getGroup();
@@ -3931,7 +3934,6 @@ export default {
}; };
//创建小组 //创建小组
const createGroup = async () => { const createGroup = async () => {
debugger;
console.log("state.groupPageList" + state.groupPageList); console.log("state.groupPageList" + state.groupPageList);
const id = state.groupInfo.id; const id = state.groupInfo.id;
const d = state.groupPageList const d = state.groupPageList
@@ -6792,6 +6794,12 @@ export default {
font-size: 16px; font-size: 16px;
line-height: 36px; line-height: 36px;
font-weight: 600; font-weight: 600;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
cursor: pointer;
} }
.more { .more {

View File

@@ -105,7 +105,7 @@ export default {
evalStuListDataTotal: 0, evalStuListDataTotal: 0,
evalCurrentPage: 1 evalCurrentPage: 1
}); });
const getInfoDate = async () => { const getInfoDate = async () => {
state.tableDataTotalLoading = true; state.tableDataTotalLoading = true;
await queryAssessmentDetailList({ await queryAssessmentDetailList({
@@ -144,7 +144,7 @@ export default {
// 导出学员信息 // 导出学员信息
function exportStudentInfo() { function exportStudentInfo() {
window.open(`${process.env.VUE_APP_BASE_API}/admin/assessment/manage/exportAssessmentMessage?assessmentId=${router.currentRoute.value.params.id}`) window.open(`${process.env.VUE_APP_BASE_API}/admin/assessment/manage/exportAssessmentMessage?courseId=${router.currentRoute.value.params.id}`)
} }
//分页 //分页
@@ -324,7 +324,7 @@ export default {
showassess, showassess,
changePaginationStu, changePaginationStu,
exportStudentInfo, exportStudentInfo,
createName, createName,
createTime createTime
}; };
}, },
@@ -507,4 +507,4 @@ export default {
.btn2:active { .btn2:active {
background: #0982ff; background: #0982ff;
} }
}</style> }</style>

View File

@@ -74,11 +74,11 @@
<div class="inname">配置权重</div> <div class="inname">配置权重</div>
</div> </div>
<div class="in" style="display: flex"> <div class="in" style="display: flex">
<div class="assess"> <!-- <div class="assess">
<div class="assesstype">评估类型</div> <div class="assesstype">评估类型</div>
<div class="assesswhole">整体评估</div> <div class="assesswhole">整体评估</div>
</div> </div> -->
<div class="assess" style="margin-left: 50px; position: relative"> <div class="assess" style="position: relative">
<div class="assesstype">权重比例</div> <div class="assesstype">权重比例</div>
<div class="assesswhole" style="background: #ffffff"> <div class="assesswhole" style="background: #ffffff">
<a-input-number <a-input-number