This commit is contained in:
Pengxiansen
2025-02-25 09:28:17 +08:00
parent 76a7070020
commit 8a460a52d7
12 changed files with 1685 additions and 300 deletions

View File

@@ -18,8 +18,8 @@ import { boeRequest } from "@/api/request";
// "application/x-www-form-urlencoded"; // "application/x-www-form-urlencoded";
axios.defaults.withCredentials = true; axios.defaults.withCredentials = true;
const http = axios.create({ const http = axios.create({
baseURL: '/growth', // baseURL: '/growth',
// baseURL: process.env.VUE_APP_BASE_API_GROWTH, baseURL: process.env.VUE_APP_BASE_API_GROWTH,
timeout: 1000 * 15, timeout: 1000 * 15,
// headers: { "Content-Type": "multipart/form-data" }, // headers: { "Content-Type": "multipart/form-data" },
headers: { "Content-Type": "application/json" }, headers: { "Content-Type": "application/json" },

View File

@@ -104,6 +104,17 @@
}, },
]; ];
} }
// 专业力
if (
n.indexOf("/growthaddpath") !== -1 ||n.indexOf("/GrowthAddPath") !== -1
) {
state.list = [
{
name: "专业力必修",
href: "/growthaddpath",
},
];
}
if ( if (
n.indexOf("/pathmanage") !== -1 ||n.indexOf("/PathManage") !== -1 n.indexOf("/pathmanage") !== -1 ||n.indexOf("/PathManage") !== -1
) { ) {

View File

@@ -27,8 +27,15 @@
@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
@@ -76,7 +83,11 @@
</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"
@@ -86,7 +97,11 @@
<router-link to="/learningpath">学习路径图</router-link> <router-link to="/learningpath">学习路径图</router-link>
</a-menu-item> </a-menu-item>
<!-- 专业力必修 --> <!-- 专业力必修 -->
<a-menu-item key="sub25" @titleClick="titleClick" v-if="checkMenu('growthpath')"> <a-menu-item
key="sub25"
@titleClick="titleClick"
v-if="checkMenu('growthpath') && !checkMenu('growthpathadd')"
>
<div class="imgBox"> <div class="imgBox">
<img <img
style="width: 20px; height: 18px" style="width: 20px; height: 18px"
@@ -95,8 +110,24 @@
</div> </div>
<router-link to="/growthpath">专业力必修</router-link> <router-link to="/growthpath">专业力必修</router-link>
</a-menu-item> </a-menu-item>
<a-menu-item
<a-sub-menu key="sub2" @titleClick="titleClick" v-if="checkMenu('projectmanage,templatelibrary')"> key="sub25"
@titleClick="titleClick"
v-if="checkMenu('growthpathadd')"
>
<div class="imgBox">
<img
style="width: 20px; height: 18px"
src="../assets/images/navleft/pathIcon.png"
/>
</div>
<router-link to="/growthaddpath">专业力必修</router-link>
</a-menu-item>
<a-sub-menu
key="sub2"
@titleClick="titleClick"
v-if="checkMenu('projectmanage,templatelibrary')"
>
<template #icon> <template #icon>
<div class="imgBox"> <div class="imgBox">
<img <img
@@ -126,7 +157,14 @@
</a-menu-item> </a-menu-item>
</a-sub-menu> </a-sub-menu>
<a-sub-menu key="sub3" v-if="checkMenu('coursewaremanage,onlinemanage,coursemanage,courserecommended')"> <a-sub-menu
key="sub3"
v-if="
checkMenu(
'coursewaremanage,onlinemanage,coursemanage,courserecommended'
)
"
>
<template #icon> <template #icon>
<div class="imgBox"> <div class="imgBox">
<img <img
@@ -183,7 +221,11 @@
</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"
@@ -213,7 +255,11 @@
<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-menu-item key="sub21" @titleClick="titleClick" v-if="checkMenu('audiencemanage')"> <a-menu-item
key="sub21"
@titleClick="titleClick"
v-if="checkMenu('audiencemanage')"
>
<div class="imgBox"> <div class="imgBox">
<img <img
style="width: 16px; height: 16px" style="width: 16px; height: 16px"
@@ -224,7 +270,10 @@
</a-menu-item> </a-menu-item>
<a-menu-item key="sub5" v-if="checkMenu('systemManage')"> <a-menu-item key="sub5" v-if="checkMenu('systemManage')">
<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"
/>
</div> </div>
<router-link to="/researchmanage">评估管理</router-link> <router-link to="/researchmanage">评估管理</router-link>
</a-menu-item> </a-menu-item>
@@ -269,8 +318,11 @@
<!-- <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
@@ -319,7 +371,11 @@
</a-menu-item> --> </a-menu-item> -->
<!-- 案例修改 --> <!-- 案例修改 -->
<!-- <a-sub-menu key="sub12" @titleClick="titleClick" v-if="checkMenu('casemanage')"> --> <!-- <a-sub-menu key="sub12" @titleClick="titleClick" v-if="checkMenu('casemanage')"> -->
<a-sub-menu key="sub12" @titleClick="titleClick" v-if="checkMenu('casemanage,caserecommended')"> <a-sub-menu
key="sub12"
@titleClick="titleClick"
v-if="checkMenu('casemanage,caserecommended')"
>
<template #icon> <template #icon>
<div class="imgBox"> <div class="imgBox">
<img <img
@@ -349,7 +405,15 @@
</a-menu-item> </a-menu-item>
</a-sub-menu> </a-sub-menu>
<!-- 教师专区 --> <!-- 教师专区 -->
<a-sub-menu key="sub22" @titleClick="titleClick" v-if="checkMenu('gratefulnotice,gratefulcarousel,teacherempowerment,teachertopic,tooldown,teacheropinion,instructorcertification')"> <a-sub-menu
key="sub22"
@titleClick="titleClick"
v-if="
checkMenu(
'gratefulnotice,gratefulcarousel,teacherempowerment,teachertopic,tooldown,teacheropinion,instructorcertification'
)
"
>
<template #icon> <template #icon>
<div class="imgBox"> <div class="imgBox">
<img <img
@@ -387,7 +451,10 @@
<router-link to="/teacherempowerment">教师赋能</router-link> <router-link to="/teacherempowerment">教师赋能</router-link>
</a-menu-item> </a-menu-item>
<a-menu-item key="sub22-7" v-if="checkMenu('instructorcertification')"> <a-menu-item
key="sub22-7"
v-if="checkMenu('instructorcertification')"
>
<span <span
:class="{ :class="{
circleActive: selectedKeys[0] === 'sub22-7' ? true : false, circleActive: selectedKeys[0] === 'sub22-7' ? true : false,
@@ -425,10 +492,21 @@
<router-link to="/teacheropinion">意见</router-link> <router-link to="/teacheropinion">意见</router-link>
</a-menu-item> </a-menu-item>
</a-sub-menu> </a-sub-menu>
<a-sub-menu key="sub24" @titleClick="titleClick" v-if="checkMenu('lecturer,lecturerRecords,lecturerExpense,lecturerSummary,lecturerTrainOrg,')"> <a-sub-menu
key="sub24"
@titleClick="titleClick"
v-if="
checkMenu(
'lecturer,lecturerRecords,lecturerExpense,lecturerSummary,lecturerTrainOrg,'
)
"
>
<template #icon> <template #icon>
<div class="imgBox"> <div class="imgBox">
<img style="width: 15px; height: 15px" src="../assets/images/navleft/project.png" /> <img
style="width: 15px; height: 15px"
src="../assets/images/navleft/project.png"
/>
</div> </div>
</template> </template>
<template #title>讲师管理</template> <template #title>讲师管理</template>
@@ -444,7 +522,7 @@
<a-menu-item key="sub24-2" v-if="checkMenu('lecturerRecords')"> <a-menu-item key="sub24-2" v-if="checkMenu('lecturerRecords')">
<span <span
:class="{ :class="{
circleActive : selectedKeys[0] === 'sub24-2' ? true : false, circleActive: selectedKeys[0] === 'sub24-2' ? true : false,
circle: selectedKeys[0] === 'sub24-2' ? false : true, circle: selectedKeys[0] === 'sub24-2' ? false : true,
}" }"
></span> ></span>
@@ -478,7 +556,11 @@
<router-link to="/organization">培训发生组织</router-link> <router-link to="/organization">培训发生组织</router-link>
</a-menu-item> </a-menu-item>
</a-sub-menu> </a-sub-menu>
<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"
@@ -487,7 +569,11 @@
</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"
@@ -496,7 +582,11 @@
</div> </div>
<router-link to="/qamanage">问答管理</router-link> <router-link to="/qamanage">问答管理</router-link>
</a-menu-item> </a-menu-item>
<a-sub-menu key="sub23" @titleClick="titleClick" v-if="checkMenu('evaluationupload')"> <a-sub-menu
key="sub23"
@titleClick="titleClick"
v-if="checkMenu('evaluationupload')"
>
<template #icon> <template #icon>
<div class="imgBox"> <div class="imgBox">
<img <img
@@ -525,7 +615,11 @@
<a target="_blank" :href="evaluationManagement">测评管理</a> <a target="_blank" :href="evaluationManagement">测评管理</a>
</a-menu-item> </a-menu-item>
</a-sub-menu> </a-sub-menu>
<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"
@@ -535,7 +629,14 @@
<router-link to="/download">下载中心</router-link> <router-link to="/download">下载中心</router-link>
</a-menu-item> </a-menu-item>
<!-- 20230804影藏 20230815放开--> <!-- 20230804影藏 20230815放开-->
<a-sub-menu key="sub17" v-if="checkMenu('operational,learningpathmap,reportproject,curriculum,caseess,reportarticle,questionsandanswers,reportexamination,overvoew,employeelearning')"> <a-sub-menu
key="sub17"
v-if="
checkMenu(
'operational,learningpathmap,reportproject,curriculum,caseess,reportarticle,questionsandanswers,reportexamination,overvoew,employeelearning'
)
"
>
<template #icon> <template #icon>
<div class="imgBox"> <div class="imgBox">
<img <img
@@ -554,7 +655,15 @@
></span> ></span>
<router-link to="/operational">运营数据概览</router-link> <router-link to="/operational">运营数据概览</router-link>
</a-menu-item> </a-menu-item>
<a-sub-menu key="sub17-2" class="treeMenu" v-if="checkMenu('learningpathmap,reportproject,curriculum,caseess,reportarticle,questionsandanswers,reportexamination')"> <a-sub-menu
key="sub17-2"
class="treeMenu"
v-if="
checkMenu(
'learningpathmap,reportproject,curriculum,caseess,reportarticle,questionsandanswers,reportexamination'
)
"
>
<template #icon> <template #icon>
<div class="img"></div> <div class="img"></div>
</template> </template>
@@ -604,7 +713,10 @@
></span> ></span>
<router-link to="/reportarticle">文章</router-link> <router-link to="/reportarticle">文章</router-link>
</a-menu-item> </a-menu-item>
<a-menu-item key="sub17-2-6" v-if="checkMenu('questionsandanswers')"> <a-menu-item
key="sub17-2-6"
v-if="checkMenu('questionsandanswers')"
>
<span <span
:class="{ :class="{
circleActive: selectedKeys[0] === 'sub17-2-6' ? true : false, circleActive: selectedKeys[0] === 'sub17-2-6' ? true : false,
@@ -623,7 +735,11 @@
<router-link to="/reportexamination">考试</router-link> <router-link to="/reportexamination">考试</router-link>
</a-menu-item> </a-menu-item>
</a-sub-menu> </a-sub-menu>
<a-sub-menu key="sub17-3" class="treeMenu" v-if="checkMenu('overvoew,employeelearning')"> <a-sub-menu
key="sub17-3"
class="treeMenu"
v-if="checkMenu('overvoew,employeelearning')"
>
<template #icon> <template #icon>
<div class="img"></div> <div class="img"></div>
</template> </template>
@@ -647,14 +763,19 @@
<router-link to="/employeelearning">员工学习数据</router-link> <router-link to="/employeelearning">员工学习数据</router-link>
</a-menu-item> </a-menu-item>
</a-sub-menu> </a-sub-menu>
<a-menu-item key="sub17-4" v-if="checkMenu('trainingnewmanager')||checkOrgs()"> <a-menu-item
key="sub17-4"
v-if="checkMenu('trainingnewmanager') || checkOrgs()"
>
<span <span
:class="{ :class="{
circleActive: selectedKeys[0] === 'sub17-4' ? true : false, circleActive: selectedKeys[0] === 'sub17-4' ? true : false,
circle: selectedKeys[0] === 'sub17-4' ? false : true, circle: selectedKeys[0] === 'sub17-4' ? false : true,
}" }"
></span> ></span>
<router-link to="/trainingnewmanager">新任管理者培训数据</router-link> <router-link to="/trainingnewmanager"
>新任管理者培训数据</router-link
>
</a-menu-item> </a-menu-item>
</a-sub-menu> </a-sub-menu>
<a-menu-item key="sub16" v-if="checkMenu('OldSystemManage')"> <a-menu-item key="sub16" v-if="checkMenu('OldSystemManage')">
@@ -752,7 +873,7 @@
<router-link to="/tooldown">教师专区</router-link> <router-link to="/tooldown">教师专区</router-link>
</a-menu-item> </a-menu-item>
<a-menu-item key="sub24" v-if="lecturerPath()" @titleClick="titleClick"> <a-menu-item key="sub24" v-if="lecturerPath()" @titleClick="titleClick">
<router-link :to="'/'+lecturerPath()">讲师管理</router-link> <router-link :to="'/' + lecturerPath()">讲师管理</router-link>
</a-menu-item> </a-menu-item>
<a-menu-item key="sub13" @titleClick="titleClick"> <a-menu-item key="sub13" @titleClick="titleClick">
<router-link to="/articlemanage">文章</router-link> <router-link to="/articlemanage">文章</router-link>
@@ -767,9 +888,7 @@
<router-link to="/evaluationupload">测评</router-link> <router-link to="/evaluationupload">测评</router-link>
</a-menu-item> </a-menu-item>
<a-menu-item key="sub18" v-if="checkMenu('OldSystemManage')"> <a-menu-item key="sub18" v-if="checkMenu('OldSystemManage')">
<router-link target="_blank" to="/oldsystemmanage">旧版</router-link> <router-link target="_blank" to="/oldsystemmanage">旧版</router-link>
</a-menu-item> </a-menu-item>
<a-menu-item key="sub19" v-if="checkMenu('ReadingClubManage')"> <a-menu-item key="sub19" v-if="checkMenu('ReadingClubManage')">
<router-link to="/readingclubmanage">业务</router-link> <router-link to="/readingclubmanage">业务</router-link>
@@ -783,18 +902,25 @@
</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,checkOrgs,lecturerRoute} from "@/utils/utils"; import { checkMenu, checkOrgs, lecturerRoute } from "@/utils/utils";
import { reportOrgs } from "@/api/indexProject"; import { reportOrgs } from "@/api/indexProject";
export default { export default {
name: "NavLeft", name: "NavLeft",
setup() { setup() {
const store = useStore(); const store = useStore();
const state = reactive({ const state = reactive({
lecturerRoute:['lecturerlist','teachingrecord','lecturerfeemanagement','lecturerfeestatistics','organization'], lecturerRoute: [
lecturerAdmin:'lecturer,lecturerRecords,lecturerExpense,lecturerSummary,lecturerTrainOrg', "lecturerlist",
"teachingrecord",
"lecturerfeemanagement",
"lecturerfeestatistics",
"organization",
],
lecturerAdmin:
"lecturer,lecturerRecords,lecturerExpense,lecturerSummary,lecturerTrainOrg",
packup: false, packup: false,
screenHeight: document.body.clientHeight, // 屏幕 高度 screenHeight: document.body.clientHeight, // 屏幕 高度
rootSubmenuKeys: [ rootSubmenuKeys: [
@@ -1194,10 +1320,10 @@ export default {
selectedKeys: "sub21", selectedKeys: "sub21",
pagename: "受众管理", pagename: "受众管理",
}, },
], ],
oldManage: window.location.protocol + process.env.VUE_APP_OLD_MANAGE, oldManage: window.location.protocol + process.env.VUE_APP_OLD_MANAGE,
evaluationManagement: window.location.protocol + process.env.VUE_APP_EVA_MANAGE evaluationManagement:
window.location.protocol + process.env.VUE_APP_EVA_MANAGE,
}); });
const onOpenChange = (openKeys) => { const onOpenChange = (openKeys) => {
@@ -1206,10 +1332,10 @@ export default {
); );
if (state.rootSubmenuKeys.indexOf(latestOpenKey) === -1) { if (state.rootSubmenuKeys.indexOf(latestOpenKey) === -1) {
state.openKeys = openKeys; state.openKeys = openKeys;
console.log('111',openKeys) console.log("111", openKeys);
} else { } else {
state.openKeys = latestOpenKey ? [latestOpenKey] : []; state.openKeys = latestOpenKey ? [latestOpenKey] : [];
console.log('222222222222222') console.log("222222222222222");
} }
}; };
const selectItem = (e) => { const selectItem = (e) => {
@@ -1222,10 +1348,10 @@ export default {
JSON.stringify([value.selectedKeys]) JSON.stringify([value.selectedKeys])
); );
// console.log('2222',[value.openKeys,value.openKeys2]) // console.log('2222',[value.openKeys,value.openKeys2])
state.openKeys = [value.openKeys,value.openKeys2]; state.openKeys = [value.openKeys, value.openKeys2];
// state.openKeys=['sub17', 'sub17-2'] // state.openKeys=['sub17', 'sub17-2']
state.selectedKeys = [value.selectedKeys]; state.selectedKeys = [value.selectedKeys];
state.openKeys2 = [value.openKeys,value.openKeys2]; state.openKeys2 = [value.openKeys, value.openKeys2];
state.selectedKeys2 = [value.openKeys]; state.selectedKeys2 = [value.openKeys];
} }
}); });
@@ -1238,9 +1364,9 @@ export default {
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;
if(!arr.some(page => page.href === n)){ if (!arr.some((page) => page.href === n)) {
console.log('不存在',n) console.log("不存在", n);
return return;
} }
arr.map((value) => { arr.map((value) => {
if (n.toLowerCase() === value.href) { if (n.toLowerCase() === value.href) {
@@ -1249,9 +1375,9 @@ export default {
"selectedKeys", "selectedKeys",
JSON.stringify([value.selectedKeys]) JSON.stringify([value.selectedKeys])
); );
state.openKeys = [value.openKeys,value.openKeys2]; state.openKeys = [value.openKeys, value.openKeys2];
state.selectedKeys = [value.selectedKeys]; state.selectedKeys = [value.selectedKeys];
state.openKeys2 = [value.openKeys,value.openKeys2]; state.openKeys2 = [value.openKeys, value.openKeys2];
state.selectedKeys2 = [value.openKeys]; state.selectedKeys2 = [value.openKeys];
} }
}); });
@@ -1306,8 +1432,8 @@ export default {
state.packup = !state.packup; state.packup = !state.packup;
}; };
const lecturerPath = () => { const lecturerPath = () => {
return state.lecturerRoute[lecturerRoute(state.lecturerAdmin)] return state.lecturerRoute[lecturerRoute(state.lecturerAdmin)];
} };
const getClientHeight = () => { const getClientHeight = () => {
state.screenHeight = document.body.clientHeight; state.screenHeight = document.body.clientHeight;
}; };

View File

@@ -435,7 +435,7 @@ const initValue = {
examinationPaperId: "", examinationPaperId: "",
examinationStartTime: "", examinationStartTime: "",
examinationEndTime: "", examinationEndTime: "",
examinationDuration: 0, examinationDuration: "",
passLine: "", passLine: "",
examType: 1, examType: 1,
source: "", source: "",
@@ -541,14 +541,11 @@ function timeChange(time, timeStr) {
// 系统考试 // 系统考试
async function confirm() { async function confirm() {
console.log(formData.value); console.log(formData.value);
if (formData.value.info.examinationName.trim() == "") { if (!formData.value.info.examinationName) {
message.warning("请输入考试名称"); message.warning("请输入考试名称");
return; return;
} }
if ( if (formData.value.info.examType != 1 && !formData.value.info.source) {
formData.value.info.source.trim() == "" &&
formData.value.info.examType != 1
) {
message.warning("请输入数据来源"); message.warning("请输入数据来源");
return; return;
} }
@@ -557,10 +554,6 @@ async function confirm() {
throw Error("数据校验不通过"); throw Error("数据校验不通过");
}); });
if (formData.value.info.examType == 1) { if (formData.value.info.examType == 1) {
if (formData.value.info.examinationName.trim() == "") {
message.warning("请输入考试名称");
return;
}
if (dayjs().isAfter(dayjs(formData.value.info.examinationEndTime))) { if (dayjs().isAfter(dayjs(formData.value.info.examinationEndTime))) {
message.warning("考试结束时间不能小于当前时间"); message.warning("考试结束时间不能小于当前时间");
return; return;
@@ -598,11 +591,10 @@ function openDrawer(row) {
row.info.examinationEndTime, row.info.examinationEndTime,
]); ]);
row && (formData.value = row); row && (formData.value = row);
row && validate = Form.useForm(
(validate = Form.useForm(
formData.value.info, formData.value.info,
row.info.examType == 2 ? outerRule : innerRule formData.value.info.examType == 2 ? outerRule : innerRule
).validate); ).validate;
visible.value = true; visible.value = true;
} }

View File

@@ -123,7 +123,7 @@ div
<div <div
class="btnss" class="btnss"
style="margin-top: 20px; flex-wrap: wrap" style="margin-top: 20px; flex-wrap: wrap"
v-if="checkPer(permissions, createId) && data?.length" v-if="data?.length"
> >
<div <div
:class="{ notClick: courseSelectRows.length > 0 }" :class="{ notClick: courseSelectRows.length > 0 }"
@@ -249,7 +249,6 @@ import * as api from "@/api/index1";
import { saveStu } from "@/api/index1"; import { saveStu } from "@/api/index1";
import BaseTable from "@/components/common/BaseTable"; import BaseTable from "@/components/common/BaseTable";
import { message } from "ant-design-vue"; import { message } from "ant-design-vue";
import { checkPer } from "@/utils/utils";
import { COURSE_PLAN_LIST, STUDENT_LIST } from "@/api/apis"; import { COURSE_PLAN_LIST, STUDENT_LIST } from "@/api/apis";
import dialog from "@/utils/dialog"; import dialog from "@/utils/dialog";
import qrCode from "@/utils/qrCode"; import qrCode from "@/utils/qrCode";
@@ -314,11 +313,7 @@ const props = defineProps({
const params = ref({ pid: 0, type: 18 }); const params = ref({ pid: 0, type: 18 });
const courseSelectRows = ref([]); const courseSelectRows = ref([]);
const infoId = computed(() => props.datasource.growthId); const infoId = computed(() => props.datasource.growthId);
const taskId = computed(() =>
props.type === 1
? props.datasource.projectTaskId
: props.datasource.routerTaskId
);
const offcoursePlanId = computed( const offcoursePlanId = computed(
() => data.value[coursePlanIndex.value]?.id || "" () => data.value[coursePlanIndex.value]?.id || ""
); );
@@ -344,8 +339,7 @@ const addUserConfirm = (stuSelectRows, projectSelectRows) => {
}; };
const planParams = computed(() => ({ const planParams = computed(() => ({
type: props.type, type: props.type,
offcourseId: props.datasource?.courseId, offcourseId: props.datasource?.taskId,
taskId: props.datasource?.id,
})); }));
const columns = ref([ const columns = ref([
{ {
@@ -562,17 +556,15 @@ const batchSign = () => {
.attendanceSign({ .attendanceSign({
courseId: offcoursePlanId.value, courseId: offcoursePlanId.value,
ids: courseSelectRows.value?.map((t) => t.studentId), ids: courseSelectRows.value?.map((t) => t.studentId),
taskId: taskId.value, taskId: props.datasource.id,
taskType: props.datasource.taskType, taskType: props.datasource.taskType,
type: 4, type: 3,
}) })
.then((res) => { .then((res) => {
message.success("签到成功"); message.success("签到成功");
tableRef.value.toLoading();
}) })
.catch((err) => { .catch((err) => {
message.error("签到失败"); message.error("签到失败");
tableRef.value.toLoading();
}); });
tableRef.value.fetch(); tableRef.value.fetch();
}, },
@@ -588,11 +580,9 @@ const batchSignAll = () => {
}) })
.then((res) => { .then((res) => {
message.success("签到成功"); message.success("签到成功");
tableRef.value.toLoading();
}) })
.catch((err) => { .catch((err) => {
message.error("签到失败"); message.error("签到失败");
tableRef.value.toLoading();
}); });
tableRef.value.fetch(); tableRef.value.fetch();
}, },
@@ -609,18 +599,18 @@ function stuSign(text) {
courseId: offcoursePlanId.value, courseId: offcoursePlanId.value,
ids: [text.record.studentId], ids: [text.record.studentId],
studentName: text.record.studentName, studentName: text.record.studentName,
taskId: taskId.value, taskId: props.datasource.id,
taskType: props.datasource.taskType, taskType: props.datasource.taskType,
type: 4, type: 3,
}); });
text.record.leaveStatus && text.record.leaveStatus &&
api.attendanceLeave({ api.attendanceLeave({
courseId: offcoursePlanId.value, courseId: offcoursePlanId.value,
ids: [text.record.studentId], ids: [text.record.studentId],
studentName: text.record.studentName, studentName: text.record.studentName,
taskId: taskId.value, taskId: props.datasource.id,
taskType: props.datasource.taskType, taskType: props.datasource.taskType,
type: 4, type: 3,
}); });
} }

View File

@@ -118,11 +118,7 @@
</div> </div>
</div> </div>
</div> </div>
<div <div class="btnss" style="margin-top: 20px" v-if="data?.length">
class="btnss"
style="margin-top: 20px"
v-if="checkPer(permissions, createId) && data?.length"
>
<div class="btn btn1" style="margin-right: 20px" @click="hasten()"> <div class="btn btn1" style="margin-right: 20px" @click="hasten()">
<div class="wz">催促学习</div> <div class="wz">催促学习</div>
</div> </div>
@@ -279,7 +275,6 @@ const courseSelectRows = ref([]);
const planParams = computed(() => ({ const planParams = computed(() => ({
type: props.type, type: props.type,
offcourseId: props.datasource?.taskId, offcourseId: props.datasource?.taskId,
taskId: props.datasource?.id,
})); }));
const { const {
data = [], data = [],

View File

@@ -153,7 +153,6 @@ const rulesRef = ref({
}, },
], ],
}); });
let validate = Form.useForm(formData.value.info, rulesRef).validate;
const closeDrawer = () => { const closeDrawer = () => {
visible.value = false; visible.value = false;
@@ -206,6 +205,7 @@ async function confirm() {
}); });
closeDrawer(); closeDrawer();
} }
let validate = null;
function openDrawer(row) { function openDrawer(row) {
row && (formData.value = row); row && (formData.value = row);
row && row &&
@@ -213,7 +213,7 @@ function openDrawer(row) {
dayjs(row.info.submitStartTime, "YYYY-MM-DD HH:mm"), dayjs(row.info.submitStartTime, "YYYY-MM-DD HH:mm"),
dayjs(row.info.submitEndTime, "YYYY-MM-DD HH:mm"), dayjs(row.info.submitEndTime, "YYYY-MM-DD HH:mm"),
]); ]);
row && (validate = Form.useForm(formData.value.info, rulesRef).validate); validate = Form.useForm(formData.value.info, rulesRef).validate;
visible.value = true; visible.value = true;
} }

View File

@@ -80,7 +80,6 @@
<div <div
class="btnss" class="btnss"
style="margin-top: 20px" style="margin-top: 20px"
v-if="checkGrowthPer(permissions)"
> >
<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="img1"></div>
@@ -93,10 +92,14 @@
</div> </div>
<template v-if="datasource.taskType == 4"> <template v-if="datasource.taskType == 4">
<div class="btn btn2" @click="exportHomeWorkShow"> <div
class="btn btn2"
@click="exportHomeWorkShow"
style="margin-left: 20px"
>
<div class="wz">导出作业</div> <div class="wz">导出作业</div>
</div> </div>
<div class="btn btn2"> <div class="btn btn2" style="margin-left: 20px">
<div class="wz" @click="showEntryScore">导入成绩</div> <div class="wz" @click="showEntryScore">导入成绩</div>
</div> </div>
</template> </template>
@@ -383,33 +386,33 @@ export default {
}, },
]; ];
let obj = { // let obj = {
title: "操作", // title: "操作",
dataIndex: "finishStatus", // dataIndex: "finishStatus",
key: "finishStatus", // key: "finishStatus",
width: 60, // width: 60,
align: "center", // align: "center",
ellipsis: true, // ellipsis: true,
className: "h", // className: "h",
customRender: (text) => { // customRender: (text) => {
return ( // return (
<div class="racona"> // <div class="racona">
<a // <a
style={{ color: text.record.finishStatus == 1 ? "" : "#666" }} // style={{ color: text.record.finishStatus == 1 ? "" : "#666" }}
onClick={() => { // onClick={() => {
text.record.finishStatus == 1 && showassess(text.record); // text.record.finishStatus == 1 && showassess(text.record);
}} // }}
> // >
查看 // 查看
</a> // </a>
</div> // </div>
); // );
}, // },
}; // };
/* 评估查看操作 */ /* 评估查看操作 */
if (props.datasource.taskType == 11) { if (props.datasource.taskType == 11) {
columns.push(obj); // columns.push(obj);
} }
return columns; return columns;
@@ -579,7 +582,6 @@ export default {
return { return {
...toRefs(state), ...toRefs(state),
selectCompletionStatus, selectCompletionStatus,
checkGrowthPer,
showassess, showassess,
closeDrawer, closeDrawer,
exportHomeWorkShow, exportHomeWorkShow,

File diff suppressed because it is too large Load Diff

View File

@@ -570,6 +570,23 @@ export default {
align: "center", align: "center",
ellipsis: true, ellipsis: true,
}, },
{
title: "总完成人数",
dataIndex: "comLearnNum",
key: "comLearnNum",
align: "center",
ellipsis: true,
},
{
title: "完成比例",
dataIndex: "ratio",
key: "ratio",
align: "center",
ellipsis: true,
customRender: ({ record }) => {
return `${record.ratio * 100}%`;
},
},
{ {
title: "状态", title: "状态",
dataIndex: "isPublished", dataIndex: "isPublished",
@@ -580,6 +597,13 @@ export default {
return record.isPublished ? "已发布" : "未发布"; return record.isPublished ? "已发布" : "未发布";
}, },
}, },
{
title: "更新时间",
dataIndex: "updateTime",
key: "updateTime",
align: "center",
ellipsis: true,
},
// { // {
// title: "归属人", // title: "归属人",

View File

@@ -905,7 +905,7 @@ export default {
visibleEwm.value[item.id] = !visibleEwm.value[item.id]; visibleEwm.value[item.id] = !visibleEwm.value[item.id];
const planParams = { const planParams = {
type: 4, type: 4,
taskId: item.id, offcourseId: item.taskId,
}; };
await courseData(planParams).then((res) => { await courseData(planParams).then((res) => {
qrCodeItems.value = res.data.data.map((dataItem) => ({ qrCodeItems.value = res.data.data.map((dataItem) => ({
@@ -959,7 +959,7 @@ export default {
visibleEwmpg.value[item.id] = !visibleEwmpg.value[item.id]; visibleEwmpg.value[item.id] = !visibleEwmpg.value[item.id];
const planParams = { const planParams = {
type: 4, type: 4,
taskId: item.id, offcourseId: item.taskId,
}; };
await courseData(planParams).then((res) => { await courseData(planParams).then((res) => {
const qrCodeItemspgItem = res.data.data.map((dataItem) => ({ const qrCodeItemspgItem = res.data.data.map((dataItem) => ({
@@ -982,6 +982,9 @@ export default {
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&level=${courseName}`, 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&level=${courseName}`,
}); });
} }
if (qrCodeItemspg.value.length == 0) {
message.info("暂无评估二维码");
}
}); });
}; };

View File

@@ -18,16 +18,16 @@ module.exports = defineConfig({
overlay: false,// 解决代码抛出异常 overlay: false,// 解决代码抛出异常
}, },
proxy: { proxy: {
// "/professional": { "/professional": {
// target: 'http://192.168.31.211:32002', target: 'http://192.168.38.211:32002',
// // target: 'http://192.168.50.195:32002', // target: 'http://192.168.50.195:32002',
// // target: 'http://192.168.86.195:32002', // target: 'http://192.168.86.195:32002',
// changeOrigin: true,
// },
"/growth": {
target: 'https:' + process.env.VUE_APP_BOE_API_URL,
changeOrigin: true, changeOrigin: true,
}, },
// "/growth": {
// target: 'https:' + process.env.VUE_APP_BOE_API_URL,
// changeOrigin: true,
// },
"/manageApi": { "/manageApi": {
target: 'https:' + process.env.VUE_APP_PROXY_URL, target: 'https:' + process.env.VUE_APP_PROXY_URL,
changeOrigin: true, //表示是否改变原域名 changeOrigin: true, //表示是否改变原域名