|
|
@@ -2,51 +2,55 @@
|
|
|
<!-- AI智能课 -->
|
|
|
<div class="home-container">
|
|
|
<!-- 展开收起侧边栏 -->
|
|
|
- <div
|
|
|
- class="icon-expand"
|
|
|
- :style="{
|
|
|
- backgroundColor: drawerVisible ? '#44449c' : '#7F70C840',
|
|
|
- left: drawerVisible ? '18%' : '0'
|
|
|
- }"
|
|
|
- @click="toggleDrawer"
|
|
|
- >
|
|
|
- <span
|
|
|
- class="vertical-lines"
|
|
|
- :style="{
|
|
|
- color: drawerVisible ? '#8a78d0' : 'white'
|
|
|
- }"
|
|
|
- >||</span
|
|
|
- >
|
|
|
- </div>
|
|
|
+ <div class="sidebar-container">
|
|
|
+ <div class="sidebar-layout">
|
|
|
+ <div
|
|
|
+ class="icon-expand"
|
|
|
+ :style="{
|
|
|
+ backgroundColor: drawerVisible ? '#44449c' : '#7F70C840',
|
|
|
+ left: drawerVisible ? '18%' : '0'
|
|
|
+ }"
|
|
|
+ @click="toggleDrawer"
|
|
|
+ >
|
|
|
+ <span
|
|
|
+ class="vertical-lines"
|
|
|
+ :style="{
|
|
|
+ color: drawerVisible ? '#8a78d0' : 'white'
|
|
|
+ }"
|
|
|
+ >||</span
|
|
|
+ >
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
|
|
|
- <transition name="drawer-slide">
|
|
|
- <div class="main-content" v-if="drawerVisible">
|
|
|
- <!-- 菜单栏 -->
|
|
|
- <div class="drawer-box">
|
|
|
- <el-row class="tac">
|
|
|
- <el-col :span="12">
|
|
|
- <span class="mb-2">
|
|
|
- <img :src="teachingImg" alt="教学" />
|
|
|
- 教学大纲
|
|
|
- </span>
|
|
|
- <el-menu
|
|
|
- default-active="1"
|
|
|
- :class="{ 'el-menu-vertical-demo': true }"
|
|
|
- >
|
|
|
- <el-menu-item
|
|
|
- v-for="(title, index) in courseTitles"
|
|
|
- :key="index + 1"
|
|
|
- :index="(index + 1).toString()"
|
|
|
- @click="goToAIExperience(index + 1)"
|
|
|
+ <transition name="drawer-slide">
|
|
|
+ <div class="main-content" v-if="drawerVisible">
|
|
|
+ <!-- 菜单栏 -->
|
|
|
+ <div class="drawer-box">
|
|
|
+ <el-row class="tac">
|
|
|
+ <el-col :span="12">
|
|
|
+ <span class="mb-2">
|
|
|
+ <img :src="teachingImg" alt="教学" />
|
|
|
+ 教学大纲
|
|
|
+ </span>
|
|
|
+ <el-menu
|
|
|
+ default-active="1"
|
|
|
+ :class="{ 'el-menu-vertical-demo': true }"
|
|
|
>
|
|
|
- 0{{ index + 1 }} {{ title }}
|
|
|
- </el-menu-item>
|
|
|
- </el-menu>
|
|
|
- </el-col>
|
|
|
- </el-row>
|
|
|
+ <el-menu-item
|
|
|
+ v-for="(title, index) in courseTitles"
|
|
|
+ :key="index + 1"
|
|
|
+ :index="(index + 1).toString()"
|
|
|
+ @click="goToAIExperience(index + 1)"
|
|
|
+ >
|
|
|
+ 0{{ index + 1 }} {{ title }}
|
|
|
+ </el-menu-item>
|
|
|
+ </el-menu>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
- </div>
|
|
|
- </transition>
|
|
|
+ </transition>
|
|
|
+ </div>
|
|
|
|
|
|
<div class="content-box">
|
|
|
<div class="box-1">
|
|
|
@@ -106,7 +110,7 @@
|
|
|
></div>
|
|
|
<div class="additional-text">
|
|
|
0{{ outlineData.ctTypeSort }} {{ outlineData.ctType }}
|
|
|
- </div>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
@@ -140,8 +144,19 @@ const selectedGrade = ref('')
|
|
|
// 添加抽屉显示状态
|
|
|
const drawerVisible = ref(true)
|
|
|
// 处理下拉菜单选择
|
|
|
-const handleGradeSelect = (command) => {
|
|
|
+const handleGradeSelect = command => {
|
|
|
selectedGrade.value = command
|
|
|
+ // 保存选中值到localStorage
|
|
|
+ localStorage.setItem('selectedGrade', command)
|
|
|
+ // 年级切换时重新加载数据的逻辑
|
|
|
+ const selectedItem = classData.value.find(item => item.ctType === command)
|
|
|
+ if (selectedItem) {
|
|
|
+ ClassOutline(selectedItem.id).then(res => {
|
|
|
+ if (res.code === 0) {
|
|
|
+ classOutlineData.value = res.data
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
}
|
|
|
// 添加切换抽屉显示状态的函数
|
|
|
const toggleDrawer = () => {
|
|
|
@@ -154,15 +169,20 @@ const classOutlineData = ref([])
|
|
|
|
|
|
const fetchCtTypes = async () => {
|
|
|
try {
|
|
|
- const response = await ClassList()
|
|
|
- console.log(response);
|
|
|
+ const response = await ClassList()
|
|
|
+ console.log(response)
|
|
|
if (response.code === 0) {
|
|
|
classData.value = response.data
|
|
|
- // 获取到数据,将第一个选项的值作为默认选中值
|
|
|
- if (classData.value.length > 0) {
|
|
|
- selectedGrade.value = classData.value[0].ctType
|
|
|
- // 初始化时获取课程大纲数据
|
|
|
- const selectedItem = classData.value[0]
|
|
|
+ // 获取到数据,优先从localStorage读取选中值
|
|
|
+ const savedGrade = localStorage.getItem('selectedGrade')
|
|
|
+ selectedGrade.value =
|
|
|
+ savedGrade ||
|
|
|
+ (classData.value.length > 0 ? classData.value[0].ctType : '')
|
|
|
+ // 初始化时获取课程大纲数据
|
|
|
+ const selectedItem =
|
|
|
+ classData.value.find(item => item.ctType === selectedGrade.value) ||
|
|
|
+ classData.value[0]
|
|
|
+ if (selectedItem) {
|
|
|
ClassOutline(selectedItem.id).then(res => {
|
|
|
if (res.code === 0) {
|
|
|
classOutlineData.value = res.data
|
|
|
@@ -240,7 +260,6 @@ const goToAIExperience = outlineData => {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
</script>
|
|
|
|
|
|
<style scoped lang="scss">
|
|
|
@@ -259,6 +278,7 @@ const goToAIExperience = outlineData => {
|
|
|
.drawer-slide-leave-to {
|
|
|
transform: translateX(-100%);
|
|
|
opacity: 0;
|
|
|
+ transition: all 0.3s ease;
|
|
|
}
|
|
|
.home-container {
|
|
|
position: fixed;
|
|
|
@@ -275,13 +295,35 @@ const goToAIExperience = outlineData => {
|
|
|
); /* 设置悬停、聚焦、点击状态下的背景色 */
|
|
|
gap: rpx(0);
|
|
|
}
|
|
|
+// // 添加新的容器样式
|
|
|
+// .sidebar-wrapper {
|
|
|
+// display: flex;
|
|
|
+// align-items: stretch;
|
|
|
+// transition: all 0.3s ease;
|
|
|
+// }
|
|
|
+// // 折叠状态样式
|
|
|
+// .sidebar-wrapper.collapsed .icon-expand {
|
|
|
+// border-radius: 0 4px 4px 0;
|
|
|
+// }
|
|
|
+.sidebar-layout {
|
|
|
+ display: flex;
|
|
|
+ flex-direction: row;
|
|
|
+ align-items: flex-start;
|
|
|
+}
|
|
|
+.icon-wrapper {
|
|
|
+ width: 40px; /* 根据实际需要调整宽度 */
|
|
|
+ flex-shrink: 0;
|
|
|
+ background-color: saddlebrown;
|
|
|
+}
|
|
|
.main-content {
|
|
|
width: rpx(135);
|
|
|
height: 100%;
|
|
|
+ flex-grow: 1;
|
|
|
position: relative;
|
|
|
background: linear-gradient(to bottom, #001169, #8a78d0);
|
|
|
overflow-y: auto; /* 添加垂直滚动条 */
|
|
|
max-height: 100%; /* 设置最大高度 */
|
|
|
+ transition: all 0.3s ease;
|
|
|
}
|
|
|
.icon-expand {
|
|
|
width: rpx(8);
|
|
|
@@ -291,14 +333,14 @@ const goToAIExperience = outlineData => {
|
|
|
z-index: 9999;
|
|
|
position: absolute;
|
|
|
top: 50%;
|
|
|
- left: 18%;
|
|
|
transform: translateY(-50%);
|
|
|
- background-color: #44449c;
|
|
|
cursor: pointer; // 添加鼠标指针样式
|
|
|
- clip-path: polygon(0 0, 100% 15%, 100% 85%, 0 100%);
|
|
|
+ // 修改裁剪路径使右侧边缘垂直无缝贴合
|
|
|
+ clip-path: polygon(0 0, 100% 15%, 100% 90%, 0 100%);
|
|
|
display: flex;
|
|
|
justify-content: center;
|
|
|
align-items: center;
|
|
|
+ // 统一过渡时间与菜单保持同步
|
|
|
transition: all 0.3s ease;
|
|
|
}
|
|
|
.icon-expand .vertical-lines {
|
|
|
@@ -451,7 +493,7 @@ const goToAIExperience = outlineData => {
|
|
|
color: white;
|
|
|
}
|
|
|
.dropdown-box {
|
|
|
- width: 40%;
|
|
|
+ width: 100%;
|
|
|
height: 100%;
|
|
|
display: flex; // 添加 flex 布局;
|
|
|
flex: 1;
|
|
|
@@ -459,7 +501,7 @@ const goToAIExperience = outlineData => {
|
|
|
// padding-right: rpx(0); // 添加右侧内边距;
|
|
|
}
|
|
|
.dropdown-box .el-button {
|
|
|
- width: rpx(55); // 设置按钮宽度;
|
|
|
+ width: rpx(60); // 设置按钮宽度;
|
|
|
height: rpx(15); // 设置按钮高度;
|
|
|
background-color: rgb(255, 255, 255, 0.7);
|
|
|
border: 1px white solid;
|
|
|
@@ -468,7 +510,7 @@ const goToAIExperience = outlineData => {
|
|
|
border: none;
|
|
|
margin-left: rpx(10);
|
|
|
border-radius: rpx(12);
|
|
|
- font-size: rpx(7); // 设置字体大小;
|
|
|
+ font-size: rpx(8); // 设置字体大小;
|
|
|
}
|
|
|
.dropdown-box .el-button:hover,
|
|
|
.dropdown-box .el-button:focus,
|
|
|
@@ -478,17 +520,20 @@ const goToAIExperience = outlineData => {
|
|
|
}
|
|
|
.dropdown-menu {
|
|
|
width: rpx(100);
|
|
|
- height: rpx(50);
|
|
|
+ // height: rpx(60);
|
|
|
border-radius: rpx(5);
|
|
|
- background-color: rgba(161, 161, 161, 0.5);
|
|
|
+ border: 1px white solid;
|
|
|
+ background-color: rgb(255, 255, 255, 0.5);
|
|
|
+ backdrop-filter: blur(rpx(5));
|
|
|
box-shadow: 0 4px 8px rgba(202, 52, 52, 0.1);
|
|
|
+ margin-left: rpx(40);
|
|
|
}
|
|
|
.dropdown-menu ::v-deep(.el-dropdown-menu__item) {
|
|
|
font-size: rpx(8);
|
|
|
color: black;
|
|
|
border-radius: rpx(5);
|
|
|
width: rpx(78);
|
|
|
- height: rpx(15);
|
|
|
+ height: rpx(20);
|
|
|
margin-left: rpx(4);
|
|
|
margin-bottom: rpx(8);
|
|
|
}
|
|
|
@@ -581,3 +626,19 @@ const goToAIExperience = outlineData => {
|
|
|
font-size: rpx(8);
|
|
|
}
|
|
|
</style>
|
|
|
+
|
|
|
+<style lang="scss">
|
|
|
+/* 消除小三角 */
|
|
|
+.el-popper__arrow {
|
|
|
+ display: none;
|
|
|
+}
|
|
|
+.el-popper.is-light,
|
|
|
+.el-dropdown__popper.el-popper {
|
|
|
+ background: transparent;
|
|
|
+ border: none;
|
|
|
+ box-shadow: none;
|
|
|
+}
|
|
|
+.el-dropdown__popper {
|
|
|
+ --el-dropdown-menuItem-hover-color: none;
|
|
|
+}
|
|
|
+</style>
|