fix: 冲突解决

This commit is contained in:
mx00085@163.com
2023-02-20 16:59:37 +08:00
144 changed files with 39277 additions and 19201 deletions

View File

@@ -1,72 +1,73 @@
<template>
<div
class="navLeft"
:style="{
class="navLeft"
:style="{
width: packup ? '100px' : '208px',
height: screenHeight - 80 + 'px',
}"
>
<div style="display: flex; justify-content: flex-end">
<img
class="packup"
src="../assets/images/navleft/packup.png"
@click="packUp"
:style="{ 'margin-right': packup ? '36px' : '14px' }"
class="packup"
src="../assets/images/navleft/packup.png"
@click="packUp"
:style="{ 'margin-right': packup ? '36px' : '14px' }"
/>
</div>
<div
style="width: 100%; margin-top: 26px"
:style="{ display: packup ? 'none' : 'block' }"
style="width: 100%; margin-top: 26px"
:style="{ display: packup ? 'none' : 'block' }"
>
<a-menu
id="dddddd"
:open-keys="openKeys"
:selectedKeys="selectedKeys"
style="width: 208px"
mode="inline"
@openChange="onOpenChange"
@select="selectItem"
id="dddddd"
:open-keys="openKeys"
:selectedKeys="selectedKeys"
style="width: 208px"
mode="inline"
@openChange="onOpenChange"
@select="selectItem"
>
<a-sub-menu key="sub10" @titleClick="titleClick">
<a-sub-menu v-if="checkMenu('coursereviewedn,coursereviewed,projectreviewedn,projectreviewed')" key="sub10"
@titleClick="titleClick">
<template #icon>
<div class="imgBox">
<img
style="width: 22px; height: 22px"
src="../assets/images/navleft/review.png"
style="width: 22px; height: 22px"
src="../assets/images/navleft/review.png"
/>
</div>
</template>
<template #title>审核管理</template>
<a-menu-item key="sub10-1">
<a-menu-item key="sub10-1" v-if="checkMenu('coursereviewedn')">
<span
:class="{
:class="{
circleActive: selectedKeys[0] === 'sub10-1' ? true : false,
circle: selectedKeys[0] === 'sub10-1' ? false : true,
}"
></span>
<router-link to="/coursereviewedn">待审核课程</router-link>
</a-menu-item>
<a-menu-item key="sub10-2">
<a-menu-item key="sub10-2" v-if="checkMenu('coursereviewed')">
<span
:class="{
:class="{
circleActive: selectedKeys[0] === 'sub10-2' ? true : false,
circle: selectedKeys[0] === 'sub10-2' ? false : true,
}"
></span>
<router-link to="/coursereviewed">已审核课程</router-link>
</a-menu-item>
<a-menu-item key="sub10-3">
<a-menu-item key="sub10-3" v-if="checkMenu('projectreviewedn')">
<span
:class="{
:class="{
circleActive: selectedKeys[0] === 'sub10-3' ? true : false,
circle: selectedKeys[0] === 'sub10-3' ? false : true,
}"
></span>
<router-link to="/projectreviewedn">待审核项目</router-link>
</a-menu-item>
<a-menu-item key="sub10-4">
<a-menu-item key="sub10-4" v-if="checkMenu('projectreviewed')">
<span
:class="{
:class="{
circleActive: selectedKeys[0] === 'sub10-4' ? true : false,
circle: selectedKeys[0] === 'sub10-4' ? false : true,
}"
@@ -75,38 +76,38 @@
</a-menu-item>
</a-sub-menu>
<a-menu-item key="sub1" @titleClick="titleClick">
<a-menu-item key="sub1" @titleClick="titleClick" v-if="checkMenu('learningpath')">
<div class="imgBox">
<img
style="width: 20px; height: 18px"
src="../assets/images/navleft/studyPath.png"
style="width: 20px; height: 18px"
src="../assets/images/navleft/studyPath.png"
/>
</div>
<router-link to="/learningpath">学习路径图</router-link>
</a-menu-item>
<a-sub-menu key="sub2" @titleClick="titleClick">
<a-sub-menu key="sub2" @titleClick="titleClick" v-if="checkMenu('projectmanage,templatelibrary')">
<template #icon>
<div class="imgBox">
<img
style="width: 15px; height: 15px"
src="../assets/images/navleft/project.png"
style="width: 15px; height: 15px"
src="../assets/images/navleft/project.png"
/>
</div>
</template>
<template #title>项目中心</template>
<a-menu-item key="sub2-1">
<a-menu-item key="sub2-1" v-if="checkMenu('projectmanage')">
<span
:class="{
:class="{
circleActive: selectedKeys[0] === 'sub2-1' ? true : false,
circle: selectedKeys[0] === 'sub2-1' ? false : true,
}"
></span>
<router-link to="/projectmanage">项目</router-link>
</a-menu-item>
<a-menu-item key="sub2-2">
<a-menu-item key="sub2-2" v-if="checkMenu('templatelibrary')">
<span
:class="{
:class="{
circleActive: selectedKeys[0] === 'sub2-2' ? true : false,
circle: selectedKeys[0] === 'sub2-2' ? false : true,
}"
@@ -115,37 +116,37 @@
</a-menu-item>
</a-sub-menu>
<a-sub-menu key="sub3">
<a-sub-menu key="sub3" v-if="checkMenu('coursewaremanage,onlinemanage,coursemanage')">
<template #icon>
<div class="imgBox">
<img
style="width: 18px; height: 15px"
src="../assets/images/navleft/course.png"
style="width: 18px; height: 15px"
src="../assets/images/navleft/course.png"
/>
</div>
</template>
<template #title>课程库</template>
<a-menu-item key="sub3-1">
<a-menu-item key="sub3-1" v-if="checkMenu('coursewaremanage')">
<span
:class="{
:class="{
circleActive: selectedKeys[0] === 'sub3-1' ? true : false,
circle: selectedKeys[0] === 'sub3-1' ? false : true,
}"
></span>
<router-link to="/coursewaremanage">面授管理</router-link>
</a-menu-item>
<a-menu-item key="sub3-2">
<a-menu-item key="sub3-2" v-if="checkMenu('onlinemanage')">
<span
:class="{
:class="{
circleActive: selectedKeys[0] === 'sub3-2' ? true : false,
circle: selectedKeys[0] === 'sub3-2' ? false : true,
}"
></span>
<router-link to="/onlinemanage">在线管理</router-link>
</a-menu-item>
<a-menu-item key="sub3-3">
<a-menu-item key="sub3-3" v-if="checkMenu('coursemanage')">
<span
:class="{
:class="{
circleActive: selectedKeys[0] === 'sub3-3' ? true : false,
circle: selectedKeys[0] === 'sub3-3' ? false : true,
}"
@@ -163,15 +164,43 @@
</div>
<span>考试中心</span>
</a-menu-item> -->
<a-menu-item key="sub5" @titleClick="titleClick">
<a-menu-item key="sub5" @titleClick="titleClick" v-if="checkMenu('researchmanage')">
<div class="imgBox">
<img
style="width: 16px; height: 16px"
src="../assets/images/navleft/survey.png"
style="width: 16px; height: 16px"
src="../assets/images/navleft/survey.png"
/>
</div>
<router-link to="/researchmanage">评估管理</router-link>
</a-menu-item>
<a-sub-menu key="sub6">
<template #icon>
<div class="imgBox">
<img
style="width: 22px; height: 22px"
src="../assets/images/navleft/review.png"
/>
</div>
</template>
<template #title>系统管理</template>
<a-menu-item key="sub6-1">
<span
:class="{
circleActive: selectedKeys[0] === 'sub6-1',
circle: selectedKeys[0]!=='sub6-1',
}"
></span>
<router-link to="/dictmanage">字典管理</router-link>
</a-menu-item>
</a-sub-menu>
<a-menu-item key="sub5" v-if="checkMenu('systemManage')">
<div class="imgBox">
<img style="width: 16px; height: 16px" src="../assets/images/navleft/system.png"/>
</div>
<router-link to="/researchmanage">评估管理</router-link>
</a-menu-item>
<!-- 2022-12-10注释 后面放开 -->
<!-- <a-menu-item key="sub6" @titleClick="titleClick">
<div class="imgBox">
@@ -213,37 +242,38 @@
<!-- <router-link to="/systemmanage">系统管理</router-link> -->
<!-- </a-menu-item> -->
<a-sub-menu key="sub11" @titleClick="titleClick">
<a-sub-menu key="sub11" @titleClick="titleClick"
v-if="checkMenu('questionmanage,papermanage,examinationcenter')">
<template #icon>
<div class="imgBox">
<img
style="width: 16px; height: 16px"
src="../assets/images/navleft/test.png"
style="width: 16px; height: 16px"
src="../assets/images/navleft/test.png"
/>
</div>
</template>
<template #title>考试</template>
<a-menu-item key="sub11-1">
<a-menu-item key="sub11-1" v-if="checkMenu('questionmanage')">
<span
:class="{
:class="{
circleActive: selectedKeys[0] === 'sub11-1' ? true : false,
circle: selectedKeys[0] === 'sub11-1' ? false : true,
}"
></span>
<router-link to="/questionmanage">试题管理</router-link>
</a-menu-item>
<a-menu-item key="sub11-2">
<a-menu-item key="sub11-2" v-if="checkMenu('papermanage')">
<span
:class="{
:class="{
circleActive: selectedKeys[0] === 'sub11-2' ? true : false,
circle: selectedKeys[0] === 'sub11-2' ? false : true,
}"
></span>
<router-link to="/papermanage">试卷管理</router-link>
</a-menu-item>
<a-menu-item key="sub11-3">
<a-menu-item key="sub11-3" v-if="checkMenu('examinationcenter')">
<span
:class="{
:class="{
circleActive: selectedKeys[0] === 'sub11-3' ? true : false,
circle: selectedKeys[0] === 'sub11-3' ? false : true,
}"
@@ -251,38 +281,38 @@
<router-link to="/examinationcenter">考试管理</router-link>
</a-menu-item>
</a-sub-menu>
<a-menu-item key="sub12" @titleClick="titleClick">
<a-menu-item key="sub12" @titleClick="titleClick" v-if="checkMenu('casemanage')">
<div class="imgBox">
<img
style="width: 20px; height: 20px"
src="../assets/images/navleft/case.png"
style="width: 20px; height: 20px"
src="../assets/images/navleft/case.png"
/>
</div>
<router-link to="/casemanage">案例管理</router-link>
</a-menu-item>
<a-menu-item key="sub13" @titleClick="titleClick">
<a-menu-item key="sub13" @titleClick="titleClick" v-if="checkMenu('articlemanage')">
<div class="imgBox">
<img
style="width: 20px; height: 20px"
src="../assets/images/navleft/article.png"
style="width: 20px; height: 20px"
src="../assets/images/navleft/article.png"
/>
</div>
<router-link to="/articlemanage">文章管理</router-link>
</a-menu-item>
<a-menu-item key="sub14" @titleClick="titleClick">
<a-menu-item key="sub14" @titleClick="titleClick" v-if="checkMenu('qamanage')">
<div class="imgBox">
<img
style="width: 20px; height: 20px"
src="../assets/images/navleft/qa.png"
style="width: 20px; height: 20px"
src="../assets/images/navleft/qa.png"
/>
</div>
<router-link to="/qamanage">问答管理</router-link>
</a-menu-item>
<a-menu-item key="sub15" @titleClick="titleClick">
<a-menu-item key="sub15" @titleClick="titleClick" v-if="checkMenu('download')">
<div class="imgBox">
<img
style="width: 20px; height: 20px"
src="../assets/images/navleft/qa.png"
style="width: 20px; height: 20px"
src="../assets/images/navleft/qa.png"
/>
</div>
<router-link to="/download">下载中心</router-link>
@@ -403,17 +433,17 @@
</a-menu>
</div>
<div
style="width: 100%; margin-top: 26px"
:style="{ display: packup ? 'block' : 'none' }"
class="packupMenu"
style="width: 100%; margin-top: 26px"
:style="{ display: packup ? 'block' : 'none' }"
class="packupMenu"
>
<a-menu
id="dddddd"
v-model:openKeys="openKeys2"
v-model:selectedKeys="selectedKeys2"
style="width: 100px"
mode="inline"
@click="handleClick"
id="dddddd"
v-model:openKeys="openKeys2"
v-model:selectedKeys="selectedKeys2"
style="width: 100px"
mode="inline"
@click="handleClick"
>
<a-menu-item key="sub10" @titleClick="titleClick">
<router-link to="/coursereviewedn">审核</router-link>
@@ -474,9 +504,11 @@
</template>
<script>
import { reactive, toRefs, onMounted, onUnmounted, watch } from "vue";
import { useRoute } from "vue-router";
import { useStore } from "vuex";
import {reactive, toRefs, onMounted, onUnmounted, watch} from "vue";
import {useRoute} from "vue-router";
import {useStore} from "vuex";
import {checkMenu} from "@/utils/utils";
export default {
name: "NavLeft",
setup() {
@@ -503,17 +535,17 @@ export default {
"sub17",
],
openKeys: localStorage.getItem("openKeys")
? JSON.parse(localStorage.getItem("openKeys"))
: ["sub1"], //默认打开以及打开的一级导航
? JSON.parse(localStorage.getItem("openKeys"))
: ["sub1"], //默认打开以及打开的一级导航
selectedKeys: localStorage.getItem("selectedKeys")
? JSON.parse(localStorage.getItem("selectedKeys"))
: ["sub1"], //默认选择以及选择的二级导航
? JSON.parse(localStorage.getItem("selectedKeys"))
: ["sub1"], //默认选择以及选择的二级导航
openKeys2: localStorage.getItem("openKeys")
? JSON.parse(localStorage.getItem("openKeys"))
: ["sub1"], //默认打开以及打开的一级导航
? JSON.parse(localStorage.getItem("openKeys"))
: ["sub1"], //默认打开以及打开的一级导航
selectedKeys2: localStorage.getItem("openKeys")
? JSON.parse(localStorage.getItem("openKeys"))
: ["sub1"], //默认选择以及选择的二级导航
? JSON.parse(localStorage.getItem("openKeys"))
: ["sub1"], //默认选择以及选择的二级导航
keysList: [
{
@@ -742,7 +774,7 @@ export default {
const onOpenChange = (openKeys) => {
const latestOpenKey = openKeys.find(
(key) => state.openKeys.indexOf(key) === -1
(key) => state.openKeys.indexOf(key) === -1
);
if (state.rootSubmenuKeys.indexOf(latestOpenKey) === -1) {
state.openKeys = openKeys;
@@ -758,8 +790,8 @@ export default {
if (e.key === value.selectedKeys) {
localStorage.setItem("openKeys", JSON.stringify([value.openKeys]));
localStorage.setItem(
"selectedKeys",
JSON.stringify([value.selectedKeys])
"selectedKeys",
JSON.stringify([value.selectedKeys])
);
// console.log('2222',[value.openKeys,value.openKeys2])
state.openKeys = [value.openKeys,value.openKeys2];
@@ -773,73 +805,70 @@ export default {
const route = useRoute();
watch(
() => route.fullPath,
(n) => {
console.log("监听路由", n, store.state.openpages, state.keysList);
// console.log("new:" + n.toLowerCase() + ",old:" + o);
let arr = state.keysList;
arr.map((value) => {
if (n.toLowerCase() === value.href) {
localStorage.setItem("openKeys", JSON.stringify([value.openKeys]));
localStorage.setItem(
"selectedKeys",
JSON.stringify([value.selectedKeys])
);
state.openKeys = [value.openKeys,value.openKeys2];
state.selectedKeys = [value.selectedKeys];
state.openKeys2 = [value.openKeys2];
state.selectedKeys2 = [value.openKeys];
}
});
let openpages = store.state.openpages;
if (openpages.length === 0) {
let pagename = state.keysList.filter((a) => {
return a.href === n.toLowerCase();
() => route.fullPath,
(n) => {
console.log("监听路由", n, store.state.openpages, state.keysList);
// console.log("new:" + n.toLowerCase() + ",old:" + o);
let arr = state.keysList;
arr.map((value) => {
if (n.toLowerCase() === value.href) {
localStorage.setItem("openKeys", JSON.stringify([value.openKeys]));
localStorage.setItem(
"selectedKeys",
JSON.stringify([value.selectedKeys])
);
state.openKeys = [value.openKeys];
state.selectedKeys = [value.selectedKeys];
state.openKeys2 = [value.openKeys];
state.selectedKeys2 = [value.openKeys];
}
});
if (pagename && pagename.length !== 0) {
let obj = {
pagename: pagename[0].pagename,
href: n.toLowerCase(),
active: true,
};
openpages.push(obj);
}
} else {
for (let i = 0; i < openpages.length; i++) {
openpages[i].active = false;
}
for (let i = 0; i < openpages.length; i++) {
openpages[i].active = false;
if (n.toLowerCase() === openpages[i].href) {
console.log("已存在", openpages[i]);
openpages[i].active = true;
break;
} else {
if (i === openpages.length - 1) {
console.log("lujingjingliu", n.toLowerCase());
console.log("dsdsdsdsd", state.keysList);
let pagename = state.keysList.filter((a) => {
return a.href === n.toLowerCase();
});
console.log("可怜见立刻离开", pagename);
if (pagename && pagename.length !== 0) {
let obj = {
pagename: pagename[0].pagename,
href: n.toLowerCase(),
active: true,
};
openpages.push(obj);
let openpages = store.state.openpages;
if (openpages.length === 0) {
let pagename = state.keysList.filter((a) => {
return a.href === n.toLowerCase();
});
if (pagename && pagename.length !== 0) {
let obj = {
pagename: pagename[0].pagename,
href: n.toLowerCase(),
active: true,
};
openpages.push(obj);
}
} else {
for (let i = 0; i < openpages.length; i++) {
openpages[i].active = false;
}
for (let i = 0; i < openpages.length; i++) {
openpages[i].active = false;
if (n.toLowerCase() === openpages[i].href) {
console.log("已存在", openpages[i]);
openpages[i].active = true;
break;
} else {
if (i === openpages.length - 1) {
let pagename = state.keysList.filter((a) => {
return a.href === n.toLowerCase();
});
if (pagename && pagename.length !== 0) {
let 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 = () => {
state.packup = !state.packup;
@@ -858,6 +887,7 @@ export default {
});
return {
...toRefs(state),
checkMenu,
onOpenChange,
selectItem,
packUp,
@@ -907,16 +937,19 @@ export default {
border: none;
box-shadow: none;
}
//图标和字放在一行
.ant-menu-title-content {
display: flex;
align-items: center;
}
.packupMenu .ant-menu-title-content {
display: flex;
align-items: center;
justify-content: center;
}
//修改导航文字颜色
.ant-menu-title-content {
padding: 0px !important;
@@ -928,6 +961,7 @@ export default {
border-right: 3px solid rgba(255, 255, 255, 0);
margin-left: 0 !important;
}
.ant-menu-item a,
.ant-menu-item a:hover {
font-size: 14px;
@@ -935,6 +969,7 @@ export default {
color: #ffffff;
line-height: 36px;
}
//修改二级导航背景色
.ant-menu-sub.ant-menu-inline {
background-color: rgba(56, 139, 225, 0);
@@ -960,10 +995,12 @@ export default {
justify-content: center;
margin-right: 10px;
}
.ant-menu-submenu-arrow {
color: rgba(255, 255, 255, 1) !important;
right: 14px !important;
}
// .ant-menu-submenu-active .ant-menu-submenu-arrow {
// right: 11px !important;
// }
@@ -972,11 +1009,13 @@ export default {
background: rgba(236, 245, 255, 0.43) !important;
border-right: 3px solid rgba(255, 255, 255, 1);
}
//选中背景
.ant-menu-item-selected {
background: rgba(236, 245, 255, 0.43) !important;
border-right: 3px solid rgba(255, 255, 255, 1);
}
.ant-menu-vertical .ant-menu-item::after,
.ant-menu-vertical-left .ant-menu-item::after,
.ant-menu-vertical-right .ant-menu-item::after,
@@ -993,6 +1032,7 @@ export default {
margin-right: 10px;
display: inline-block;
}
.circleActive {
width: 10px;
height: 10px;