liyanbo 2 сар өмнө
parent
commit
c43761b777

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

@@ -6,4 +6,12 @@ export function getUserInfo(userId) {
     url: 'bjdxWeb/web/getUserInfo?userId=' + userId,
     method: 'get'
   });
+}
+
+// 激活邀请码
+export function activateInviteCode(inviteCode){
+  return axios({
+    url: `bjdxWeb/web/activateInviteCode?inviteCode=${inviteCode}`,
+    method: 'post'
+  })
 }

+ 30 - 6
src/components/user/UserInfoPopover.vue

@@ -52,10 +52,10 @@
 import { ref, onMounted } from 'vue'
 import { useRouter } from 'vue-router'
 import { ElMessage } from 'element-plus'
-import { logoutLogic } from '@/utils/loginUtils.js'
+import {logoutLogic} from '@/utils/loginUtils.js'
 import { homeRoutes } from "@/router/index.js"
 // 用户信息接口
-import { getUserInfo } from '@/api/user/user.js'
+import {activateInviteCode, getUserInfo} from '@/api/user/user.js'
 // 图标
 import { ArrowUpBold, ArrowDownBold } from '@element-plus/icons-vue'
 
@@ -66,14 +66,22 @@ const activationCode = ref('')
 const courses = ref([])
 
 // 用户名响应式变量
-const userName = ref(import.meta.env.VITE_APP_DEFAULT_LOGIN_USERNAME)
+const userName = ref()
+const userInfo = ref({
+  userId: null,
+  userName: import.meta.env.VITE_APP_DEFAULT_LOGIN_USERNAME,
+  nickname: '',
+  courseExpireTime: '',
+  blocklyExpireTime: '',
+  aiCourseExpireTime: ''
+})
 
 // 下拉框可见性状态
 const dropdownVisible = ref(false)
 
 // 更新用户名
 const updateUserName = () => {
-  userName.value = localStorage.getItem('userName') || import.meta.env.VITE_APP_DEFAULT_LOGIN_USERNAME
+  userInfo.value.userName = localStorage.getItem('userName') || import.meta.env.VITE_APP_DEFAULT_LOGIN_USERNAME
 }
 
 // 处理下拉框显示/隐藏事件
@@ -105,7 +113,7 @@ const fetchUserInfo = async () => {
       // 将课程权限信息存储在localStorage中,以便其他组件使用
       const coursePermissions = {
         '课程权限': res.data.courseExpireTime || '无权限',
-        'AI编程课': res.data.blocklyExpireTime || '无权限',
+        '编程课': res.data.blocklyExpireTime || '无权限',
         'AI实验课': res.data.aiCourseExpireTime || '无权限'
       };
       localStorage.setItem('coursePermissions', JSON.stringify(coursePermissions));
@@ -115,6 +123,21 @@ const fetchUserInfo = async () => {
   }
 }
 
+//激活邀请码
+const activeInviteCode = async (inviteCode) => {
+  // 调用activeInviteCode API 激活邀请码
+  const activeRes = await activateInviteCode(inviteCode)
+
+  // 检查是否激活成功
+  if (activeRes && activeRes.code === 0) {
+    ElMessage.success('邀请码激活成功')
+    // 获取用户web权限角色
+    await fetchUserInfo();
+  } else {
+    ElMessage.error(activeRes?.message || '邀请码激活失败')
+  }
+}
+
 // 获取当前路由对象
 const router = useRouter()
 // 退出登录
@@ -128,8 +151,9 @@ const handleActivation = () => {
     ElMessage.warning('请输入激活码')
     return
   }
+
   // 这里可以添加激活码验证逻辑
-  ElMessage.success('激活码:' + activationCode.value + ' 提交成功')
+  activeInviteCode(activationCode.value)
   activationCode.value = ''
 }
 

+ 12 - 6
src/utils/loginUtils.js

@@ -1,11 +1,17 @@
-import { ref, computed } from 'vue'
-import { getTenantIdByName, login, smsLogin, smsCode, logout } from '@/api/login/login.js'
-import { ElLoading, ElMessage } from 'element-plus'
-import { refreshAllDictData } from './dictUtils.js';
+import {computed, ref} from 'vue'
+import {
+  getTenantIdByName,
+  login,
+  logout,
+  smsCode,
+  smsLogin
+} from '@/api/login/login.js'
+import {ElLoading, ElMessage} from 'element-plus'
+import {refreshAllDictData} from './dictUtils.js';
 // CryptoJS 库(用于密码加密)
 import CryptoJS from 'crypto-js';
 // 消息工具
-import { Message } from './message/Message.js';
+import {Message} from './message/Message.js';
 import {CONFIG, refreshRoleRoute} from "@/utils/roleUtils.js";
 import {homeRoutes} from "@/router/index.js";
 
@@ -14,6 +20,7 @@ const SECRET_KEY = import.meta.env.VITE_SECRET_KEY;
 
 //需要删除的缓存key列表
 const CACHE_KEYS_TO_DELETE = [
+  'userId',
   'token',
   'isLoggedIn',
   CONFIG.USER_ROLE_ROUTE_KEY,
@@ -175,7 +182,6 @@ const loginLogic = async (loginForm, tenantId, isAuthorized, router, redirectPat
       }
 
       // 总是存储用户名和租户名称
-      localStorage.setItem('userName', loginForm.username)
       localStorage.setItem('tenantName', loginForm.tenantName)
       // 存储记住我状态
       localStorage.setItem('rememberMe', loginForm.rememberMe)

+ 2 - 1
src/views/RegisterLogin.vue

@@ -195,8 +195,9 @@ const handleRegister = async () => {
     // 调用注册接口
     const res = await registerSignUp({ 'Tenant-Id': tenantId },registerData);
     // 注册成功处理
-    if (res && res.code === 200) {
+    if (res && res.code === 0) {
       ElMessage.success('注册成功,请登录');
+      goBackToLogin();
     } else {
       ElMessage.error(res && res.message || '注册失败,请稍后重试');
     }