Parcourir la source

Merge remote-tracking branch 'origin/wanzi' into muzi

liyanbo il y a 2 mois
Parent
commit
41c04fca80

+ 9 - 0
src/api/user/user.js

@@ -0,0 +1,9 @@
+import axios from '@/utils/request';
+
+// 用户信息
+export function getUserInfo(userId) {
+  return axios({
+    url: 'bjdxWeb/web/getUserInfo?userId=' + userId,
+    method: 'get'
+  });
+}

+ 43 - 1
src/components/HomePage.vue

@@ -109,11 +109,44 @@ const updatePlatformTitle = () => {
 const router = useRouter()
 
 
+// 检查课程权限的通用函数
+const checkCoursePermission = (courseName) => {
+  // 从本地存储获取课程权限配置
+  const coursePermissionsStr = localStorage.getItem('coursePermissions');
+  let hasPermission = true; 
+  
+  if (coursePermissionsStr) {
+    try {
+      const coursePermissions = JSON.parse(coursePermissionsStr);
+      // 获取对应课程的权限状态
+      const permission = coursePermissions[courseName];
+      // 检查是否无权限
+      if (permission === '无权限') {
+        hasPermission = false;
+      }
+    } catch (error) {
+      console.error('解析课程权限配置失败:', error);
+    }
+  }
+  
+  return hasPermission;
+}
+
 // 处理按钮点击事件
 const handleButtonClick = (button) => {
+  // 检查课程权限
+  const hasPermission = checkCoursePermission(button.name);
+  
+  if (!hasPermission) {
+    // 无权限时弹框提示
+    ElMessage.warning('未激活课程,无法访问');
+    return;
+  }
+  
   selectedButton.value = button.name
   router.push(button.route)
 }
+
 // 按钮配置数组
 const buttonConfigs = ref([
   { name: 'AI编程课', route: blocklyRoutes.home },
@@ -124,10 +157,19 @@ const selectedButton = ref('')
 
 // 图片路径
 const indexImages = ref([intelligenceImg, roomImg, testImg, studyImg])
-// AI初体验
+
+// 智能课
 const goToAIGeneralCourse = title => {
+  // 检查课程权限
+  const hasPermission = checkCoursePermission('课程权限');
+  if (!hasPermission) {
+    // 无权限时弹框提示
+    ElMessage.warning('未激活课程,无法访问');
+    return;
+  }
   router.push({ path: '/ai-general-course', state: { title } })
 }
+
 //AI实验室
 const goToAILab = () => {
   router.push({

+ 44 - 4
src/components/user/UserInfoPopover.vue

@@ -51,15 +51,14 @@ import { useRouter } from 'vue-router'
 import { ElMessage } from 'element-plus'
 import { logoutLogic } from '@/utils/loginUtils.js'
 import { homeRoutes } from "@/router/index.js"
+// 用户信息接口
+import { getUserInfo } from '@/api/user/user.js'
 
 // 激活码响应式变量
 const activationCode = ref('')
 
 // 课程列表响应式变量
-const courses = ref([
-  { name: 'AI编程课', expireDate: '2026.02.21到期' },
-  { name: 'AI实验课', expireDate: '2026.05.12到期' }
-])
+const courses = ref([])
 
 // 用户名响应式变量
 const userName = ref(import.meta.env.VITE_APP_DEFAULT_LOGIN_USERNAME)
@@ -69,6 +68,40 @@ const updateUserName = () => {
   userName.value = localStorage.getItem('userName') || import.meta.env.VITE_APP_DEFAULT_LOGIN_USERNAME
 }
 
+// 获取用户信息
+const fetchUserInfo = async () => {
+  try {
+    const userId = localStorage.getItem('userId');
+    // 检查userId是否存在
+    if (!userId) {
+      console.warn('用户未登录,无法获取用户信息');
+      return;
+    }
+    const res = await getUserInfo(userId);
+    console.log('用户信息:', res);
+    if (res.code === 0 && res.data) {
+      // 更新用户名
+      userName.value = res.data.username;
+      localStorage.setItem('userName', res.data.username);
+      // 更新课程信息
+      courses.value = [
+        { name: '课程权限', expireDate: res.data.courseExpireTime || '无权限' },
+        { name: 'AI编程课', expireDate: res.data.blocklyExpireTime || '无权限' },
+        { name: 'AI实验课', expireDate: res.data.aiCourseExpireTime || '无权限' }
+      ];
+      // 将课程权限信息存储在localStorage中,以便其他组件使用
+      const coursePermissions = {
+        '课程权限': res.data.courseExpireTime || '无权限',
+        'AI编程课': res.data.blocklyExpireTime || '无权限',
+        'AI实验课': res.data.aiCourseExpireTime || '无权限'
+      };
+      localStorage.setItem('coursePermissions', JSON.stringify(coursePermissions));
+    }
+  } catch (error) {
+    console.error('获取用户信息失败:', error);
+  }
+}
+
 // 获取当前路由对象
 const router = useRouter()
 // 退出登录
@@ -90,6 +123,8 @@ const handleActivation = () => {
 onMounted(() => {
   // 初始化用户名
   updateUserName()
+  // 获取用户信息
+  fetchUserInfo()
   // storage事件监听器,监听其他标签页对localStorage的修改
   window.addEventListener('storage', (e) => {
     if (e.key === 'userName') {
@@ -97,6 +132,11 @@ onMounted(() => {
     }
   })
 })
+
+
+
+
+
 </script>
 
 <style scoped lang="scss">

+ 5 - 0
src/utils/loginUtils.js

@@ -168,6 +168,11 @@ const loginLogic = async (loginForm, tenantId, isAuthorized, router, redirectPat
       // 存储登录状态
       localStorage.setItem('isLoggedIn', 'true')
       localStorage.setItem('token', res.data.accessToken)
+      
+      // 登录成功后存储用户ID
+      if (res.data.userId) {
+        localStorage.setItem('userId', res.data.userId)
+      }
 
       // 总是存储用户名和租户名称
       localStorage.setItem('userName', loginForm.username)