Jelajahi Sumber

初始化页面导航

lm 1 bulan lalu
induk
melakukan
196b21691a
50 mengubah file dengan 165 tambahan dan 83 penghapusan
  1. 1 1
      src/api/demo.ts
  2. TEMPAT SAMPAH
      src/assets/fileIcon/audio.png
  3. TEMPAT SAMPAH
      src/assets/fileIcon/doc.png
  4. TEMPAT SAMPAH
      src/assets/fileIcon/img.png
  5. TEMPAT SAMPAH
      src/assets/fileIcon/other.png
  6. TEMPAT SAMPAH
      src/assets/fileIcon/pdf.png
  7. TEMPAT SAMPAH
      src/assets/fileIcon/ppt.png
  8. TEMPAT SAMPAH
      src/assets/fileIcon/video.png
  9. TEMPAT SAMPAH
      src/assets/fileIcon/xlsx.png
  10. TEMPAT SAMPAH
      src/assets/fileIcon/zip.png
  11. TEMPAT SAMPAH
      src/assets/school/No1.png
  12. TEMPAT SAMPAH
      src/assets/school/No2.png
  13. TEMPAT SAMPAH
      src/assets/school/No3.png
  14. TEMPAT SAMPAH
      src/assets/school/all_bg.png
  15. TEMPAT SAMPAH
      src/assets/school/all_icon.png
  16. TEMPAT SAMPAH
      src/assets/school/average_bg.png
  17. TEMPAT SAMPAH
      src/assets/school/average_icon.png
  18. TEMPAT SAMPAH
      src/assets/school/average_subicon.png
  19. TEMPAT SAMPAH
      src/assets/school/course_bg.png
  20. TEMPAT SAMPAH
      src/assets/school/finished_bg.png
  21. TEMPAT SAMPAH
      src/assets/school/finished_icon.png
  22. TEMPAT SAMPAH
      src/assets/school/has_audit_icon.png
  23. TEMPAT SAMPAH
      src/assets/school/has_audit_subicon.png
  24. TEMPAT SAMPAH
      src/assets/school/has_learned_icon.png
  25. TEMPAT SAMPAH
      src/assets/school/learnImg.png
  26. TEMPAT SAMPAH
      src/assets/school/learning_total_icon.png
  27. TEMPAT SAMPAH
      src/assets/school/new_course_bg.png
  28. TEMPAT SAMPAH
      src/assets/school/overtime_bg.png
  29. TEMPAT SAMPAH
      src/assets/school/overtime_icon.png
  30. TEMPAT SAMPAH
      src/assets/school/reject_audit_icon.png
  31. TEMPAT SAMPAH
      src/assets/school/reject_audit_subicon.png
  32. TEMPAT SAMPAH
      src/assets/school/total_audit_icon.png
  33. TEMPAT SAMPAH
      src/assets/school/total_audit_subicon.png
  34. TEMPAT SAMPAH
      src/assets/school/unfinished_icon.png
  35. TEMPAT SAMPAH
      src/assets/school/unwatch_icon.png
  36. TEMPAT SAMPAH
      src/assets/school/wait_audit_bg.webp
  37. TEMPAT SAMPAH
      src/assets/school/wait_audit_icon.png
  38. TEMPAT SAMPAH
      src/assets/school/wait_audit_subicon.png
  39. TEMPAT SAMPAH
      src/assets/school/waiting_icon.png
  40. TEMPAT SAMPAH
      src/assets/school/watching_icon.png
  41. 45 0
      src/layout/components/header.vue
  42. 7 10
      src/layout/index.vue
  43. 17 4
      src/router/index.ts
  44. 17 7
      src/store/index.ts
  45. 0 38
      src/views/courseCenter/CourseCenter.vue
  46. 2 23
      src/views/login/login.vue
  47. 19 0
      src/views/personalCenter/PersonalCenter.vue
  48. 19 0
      src/views/reviewAnalysis/ReviewAnalysis.vue
  49. 19 0
      src/views/reviewManagement/ReviewManagement.vue
  50. 19 0
      src/views/surveyManagement/SurveyManagement.vue

+ 1 - 1
src/api/courseCenter.ts → src/api/demo.ts

@@ -1,4 +1,4 @@
-import request from '../utils/request.ts'
+import request from '../utils/request.js'
 
 
 let teacherPrefix = import.meta.env.VITE_API_TEACHER_PRE 
 let teacherPrefix = import.meta.env.VITE_API_TEACHER_PRE 
 
 

TEMPAT SAMPAH
src/assets/fileIcon/audio.png


TEMPAT SAMPAH
src/assets/fileIcon/doc.png


TEMPAT SAMPAH
src/assets/fileIcon/img.png


TEMPAT SAMPAH
src/assets/fileIcon/other.png


TEMPAT SAMPAH
src/assets/fileIcon/pdf.png


TEMPAT SAMPAH
src/assets/fileIcon/ppt.png


TEMPAT SAMPAH
src/assets/fileIcon/video.png


TEMPAT SAMPAH
src/assets/fileIcon/xlsx.png


TEMPAT SAMPAH
src/assets/fileIcon/zip.png


TEMPAT SAMPAH
src/assets/school/No1.png


TEMPAT SAMPAH
src/assets/school/No2.png


TEMPAT SAMPAH
src/assets/school/No3.png


TEMPAT SAMPAH
src/assets/school/all_bg.png


TEMPAT SAMPAH
src/assets/school/all_icon.png


TEMPAT SAMPAH
src/assets/school/average_bg.png


TEMPAT SAMPAH
src/assets/school/average_icon.png


TEMPAT SAMPAH
src/assets/school/average_subicon.png


TEMPAT SAMPAH
src/assets/school/course_bg.png


TEMPAT SAMPAH
src/assets/school/finished_bg.png


TEMPAT SAMPAH
src/assets/school/finished_icon.png


TEMPAT SAMPAH
src/assets/school/has_audit_icon.png


TEMPAT SAMPAH
src/assets/school/has_audit_subicon.png


TEMPAT SAMPAH
src/assets/school/has_learned_icon.png


TEMPAT SAMPAH
src/assets/school/learnImg.png


TEMPAT SAMPAH
src/assets/school/learning_total_icon.png


TEMPAT SAMPAH
src/assets/school/new_course_bg.png


TEMPAT SAMPAH
src/assets/school/overtime_bg.png


TEMPAT SAMPAH
src/assets/school/overtime_icon.png


TEMPAT SAMPAH
src/assets/school/reject_audit_icon.png


TEMPAT SAMPAH
src/assets/school/reject_audit_subicon.png


TEMPAT SAMPAH
src/assets/school/total_audit_icon.png


TEMPAT SAMPAH
src/assets/school/total_audit_subicon.png


TEMPAT SAMPAH
src/assets/school/unfinished_icon.png


TEMPAT SAMPAH
src/assets/school/unwatch_icon.png


TEMPAT SAMPAH
src/assets/school/wait_audit_bg.webp


TEMPAT SAMPAH
src/assets/school/wait_audit_icon.png


TEMPAT SAMPAH
src/assets/school/wait_audit_subicon.png


TEMPAT SAMPAH
src/assets/school/waiting_icon.png


TEMPAT SAMPAH
src/assets/school/watching_icon.png


+ 45 - 0
src/layout/components/header.vue

@@ -5,6 +5,14 @@
       <span class="big_head">教师智能工作平台</span>
       <span class="big_head">教师智能工作平台</span>
       <!-- <div class="small_head">大数据精准教学平台</div> -->
       <!-- <div class="small_head">大数据精准教学平台</div> -->
     </div>
     </div>
+
+    <ul class="horizontal_nav" v-if="horizontalNavList?.length > 0">
+      <li v-for="navItm in horizontalNavList" @click="router.push(navItm.route)" :class="{active:route.path == navItm.route}" >
+        {{ navItm.title }}
+      </li>
+    </ul>
+
+
     <div class="head_content_right">
     <div class="head_content_right">
       <!-- <span class="schoolName"> -->
       <!-- <span class="schoolName"> -->
         <!-- {{userInfo.schoolName}} -->
         <!-- {{userInfo.schoolName}} -->
@@ -60,6 +68,7 @@ export default {
 </script>
 </script>
 <script lang="ts" setup>
 <script lang="ts" setup>
 import router from '@/router'
 import router from '@/router'
+import { useRoute } from 'vue-router'
 import { ArrowDown } from '@element-plus/icons-vue'
 import { ArrowDown } from '@element-plus/icons-vue'
 import { ref, reactive, computed } from 'vue'
 import { ref, reactive, computed } from 'vue'
 import {loginOut} from '@/api/login.ts'
 import {loginOut} from '@/api/login.ts'
@@ -67,6 +76,21 @@ import { ElMessage } from 'element-plus'
 import type { FormInstance, FormRules } from 'element-plus'
 import type { FormInstance, FormRules } from 'element-plus'
 import defaultIcon from '@/assets/school/default_logo.svg'
 import defaultIcon from '@/assets/school/default_logo.svg'
 
 
+const route = useRoute()
+
+
+interface NavItm {
+  title:String,
+  route:String,
+}
+
+const props = defineProps({
+  horizontalNavList:{
+    type:Array<NavItm>,
+    default:()=>[]
+  }
+})
+
 // 跳转登录页
 // 跳转登录页
 const GoToLogin = ()=>{
 const GoToLogin = ()=>{
   // router.push('/login')
   // router.push('/login')
@@ -205,4 +229,25 @@ const confirmPassWord = async (formEl: FormInstance | undefined) => {
     }
     }
   }
   }
 }
 }
+
+.horizontal_nav{
+  height: 100%;
+  display: flex;
+  align-items: center;
+  li{
+    height: 100%;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+
+    padding:10px;
+    font-size: 18px;
+    color: #FFFFFF;
+    cursor: pointer;
+    &.active{
+      background-color: #2550C8;
+    }
+  }
+
+}
 </style>
 </style>

+ 7 - 10
src/layout/index.vue

@@ -1,13 +1,13 @@
 <template>
 <template>
   <div class="layout">
   <div class="layout">
-    <Header/>
+    <Header :horizontalNavList="horizontalNavList"/>
     <AppMain :menuItems="menuList" />
     <AppMain :menuItems="menuList" />
   </div>
   </div>
 </template>
 </template>
 
 
 <!-- vue3 setup -->
 <!-- vue3 setup -->
 <script setup lang="ts">
 <script setup lang="ts">
-import {computed,} from 'vue'
+import {computed,ref} from 'vue'
 import Header from './components/header.vue'
 import Header from './components/header.vue'
 import AppMain from './components/AppMain.vue'
 import AppMain from './components/AppMain.vue'
 import { useStore } from 'vuex'
 import { useStore } from 'vuex'
@@ -17,17 +17,14 @@ const route = useRoute()
 
 
 // 此处要根据登录用户的权限 分条件展示 不同的内容
 // 此处要根据登录用户的权限 分条件展示 不同的内容
 const menuList =  computed(()=>{
 const menuList =  computed(()=>{
-  let user= JSON.parse(localStorage.getItem('userInfo') || '{}')
-  console.log('用户信息',user)
-  //  user.roleNames
-  // if(route.path.startsWith('/main/learningRoom') ||  route.path.startsWith('/main/learningMonitorDetail') ){
-  //   return []
-  // }else{
-      return store.state.managerMenuItems
-  // }
+  return []
 })
 })
 
 
 
 
+const horizontalNavList = computed(()=>{
+  return store.state.horizontalMenuItems
+})
+
 </script>
 </script>
 
 
 <style>
 <style>

+ 17 - 4
src/router/index.ts

@@ -23,11 +23,24 @@ const routes: Array<RouteRecordRaw> = [
     children: [
     children: [
       {
       {
         path: '',
         path: '',
-        name: 'courseCenter',
-        component: () => import('@/views/courseCenter/CourseCenter.vue')
+        name: 'surveyManagement',
+        component: () => import('@/views/surveyManagement/SurveyManagement.vue')
+      },
+      {
+        path: 'reviewManagement',
+        name: 'reviewManagement',
+        component: () => import('@/views/reviewManagement/ReviewManagement.vue')
+      },
+      {
+        path: 'reviewAnalysis',
+        name: 'reviewAnalysis',
+        component: () => import('@/views/reviewAnalysis/ReviewAnalysis.vue')
+      },
+      {
+        path: 'personalCenter',
+        name: 'personalCenter',
+        component: () => import('@/views/personalCenter/personalCenter.vue')
       },
       },
-
-     
     ]
     ]
 
 
   },
   },

+ 17 - 7
src/store/index.ts

@@ -13,14 +13,25 @@ interface RootState {
 const store = createStore<RootState>({
 const store = createStore<RootState>({
   state: () => ({
   state: () => ({
     count: 0,
     count: 0,
-    managerMenuItems:[
+    horizontalMenuItems:[
       {
       {
-        title:'课程中心',
-        icon:'hjx-kechengzhongxin',
+        title:'问卷管理',
         route:`/main`
         route:`/main`
       },
       },
+      {
+        title:'评价管理',
+        route:`/main/reviewManagement`
+      },
+      {
+        title:'评价分析',
+        route:`/main/reviewAnalysis`
+      },
+      {
+        title:'个人中心',
+        route:`/main/personalCenter`
+      },
+    ]
 
 
-    ],
   }),
   }),
   mutations: {
   mutations: {
     increment(state: RootState) {
     increment(state: RootState) {
@@ -34,9 +45,8 @@ const store = createStore<RootState>({
   },
   },
   getters: {
   getters: {
     count: (state: RootState) => state.count,
     count: (state: RootState) => state.count,
-
-    getDemoManagerMenuItems:(state)=>()=>{
-      return  state.managerMenuItems.map(item=>{
+    getDemo:(state)=>()=>{
+      return  state.horizontalMenuItems.map(item=>{
           return item
           return item
       })
       })
     },
     },

+ 0 - 38
src/views/courseCenter/CourseCenter.vue

@@ -1,38 +0,0 @@
-<template>
-    <div  ref="courseDom" class="main_container">
-        <div  class="page_item end_item">
-            <div class="scroll_page">
-            </div>
-            
-            <div class="page_jg_20"></div>
-           
-        </div>
-    </div>
-</template>
-
-<script lang="ts" setup>
-import {onMounted, ref} from 'vue'
-
-
-
-
-
-
-onMounted(async ()=>{
-})
-</script>
-
-<style lang="scss" scoped>
-.main_container{
-    overflow: auto;
-    flex-direction: column;
-    gap: 20px;
-    .end_item{
-        > div:last-child{
-        flex-grow: 0 !important;
-        }
-    }
-}
-
-
-</style>

+ 2 - 23
src/views/login/login.vue

@@ -97,7 +97,6 @@ import { ref, onMounted, computed, watch } from 'vue'
 // import particles from 'particles.js'
 // import particles from 'particles.js'
 import { login,getUserInfo} from '@/api/login.ts'
 import { login,getUserInfo} from '@/api/login.ts'
 
 
-// import { studentLogin,getStudentUserInfo } from '@/api/studentLogin.ts'
 import { ElMessage } from 'element-plus' // 
 import { ElMessage } from 'element-plus' // 
 import { useRouter } from 'vue-router'
 import { useRouter } from 'vue-router'
 import { encrypt } from "@/utils/jsencrypt";
 import { encrypt } from "@/utils/jsencrypt";
@@ -249,26 +248,6 @@ onMounted(() => {
   }
   }
 })
 })
 
 
-const apiMsg =  computed(()=>{
-  /*
-  if(isStudentLogin.value){
-    return {
-      login:studentLogin,
-      getUserInfo:getStudentUserInfo
-    }
-  }else{
-    return {
-      login:teacherLogin,
-      getUserInfo:getTeacherUserInfo
-    }
-  }
-  */
-  return {
-    login,
-    getUserInfo
-  }
-})
-
 const HandleLoginChange = (val)=>{
 const HandleLoginChange = (val)=>{
   isStudentLogin.value = val
   isStudentLogin.value = val
 }
 }
@@ -303,7 +282,7 @@ const SubmitLogin = async () => {
 
 
 
 
   try{
   try{
-    res  = await apiMsg.value.login(params)
+    res  = await login(params)
     loadingLogin.value = false
     loadingLogin.value = false
     if (res.code === 200) {
     if (res.code === 200) {
       console.log("登录成功返回",res)
       console.log("登录成功返回",res)
@@ -314,7 +293,7 @@ const SubmitLogin = async () => {
       
       
       // 登录成功后调用获取用户信息接口  
       // 登录成功后调用获取用户信息接口  
       let userInfoRes = undefined
       let userInfoRes = undefined
-      userInfoRes = await apiMsg.value.getUserInfo(res.data.token)
+      userInfoRes = await getUserInfo(res.data.token)
       console.log("获取用户信息返回",userInfoRes)
       console.log("获取用户信息返回",userInfoRes)
       if (userInfoRes?.code === 200) {
       if (userInfoRes?.code === 200) {
         // 存储用户信息到 localStorage 或 Pinia
         // 存储用户信息到 localStorage 或 Pinia

+ 19 - 0
src/views/personalCenter/PersonalCenter.vue

@@ -0,0 +1,19 @@
+<template>
+    <div  ref="courseDom" class="main_container">
+        <div  class="page_item end_item">
+           
+        </div>
+    </div>
+</template>
+
+<script lang="ts" setup>
+import {onMounted, ref} from 'vue'
+
+
+
+onMounted(async ()=>{
+})
+</script>
+
+<style lang="scss" scoped>
+</style>

+ 19 - 0
src/views/reviewAnalysis/ReviewAnalysis.vue

@@ -0,0 +1,19 @@
+<template>
+    <div  ref="courseDom" class="main_container">
+        <div  class="page_item end_item">
+           
+        </div>
+    </div>
+</template>
+
+<script lang="ts" setup>
+import {onMounted, ref} from 'vue'
+
+
+
+onMounted(async ()=>{
+})
+</script>
+
+<style lang="scss" scoped>
+</style>

+ 19 - 0
src/views/reviewManagement/ReviewManagement.vue

@@ -0,0 +1,19 @@
+<template>
+    <div  ref="courseDom" class="main_container">
+        <div  class="page_item end_item">
+           
+        </div>
+    </div>
+</template>
+
+<script lang="ts" setup>
+import {onMounted, ref} from 'vue'
+
+
+
+onMounted(async ()=>{
+})
+</script>
+
+<style lang="scss" scoped>
+</style>

+ 19 - 0
src/views/surveyManagement/SurveyManagement.vue

@@ -0,0 +1,19 @@
+<template>
+    <div  ref="courseDom" class="main_container">
+        <div  class="page_item end_item">
+           
+        </div>
+    </div>
+</template>
+
+<script lang="ts" setup>
+import {onMounted, ref} from 'vue'
+
+
+
+onMounted(async ()=>{
+})
+</script>
+
+<style lang="scss" scoped>
+</style>