AI团宝页面对纯学生隐藏「进入后台」入口

This commit is contained in:
2026-09-19 17:26:48 +08:00
parent 6b967b6b69
commit 829c17f1ce
2 changed files with 26 additions and 1 deletions
+15
View File
@@ -66,6 +66,21 @@ export function hasAnyRole(value: string | string[]): boolean {
return arrayHasAny(userStore?.roles, value); return arrayHasAny(userStore?.roles, value);
} }
/** 学生角色标识 */
export const STUDENT_ROLE_CODE = 'student';
/**
* 是否仅为学生身份(角色恰好只有 student)
*
* 与后端 BaseController#hasOnlyStudentRole 保持一致:拥有任意其他角色
* (学生干部、教师、管理员等)即视为非纯学生,不在此列。
*/
export function isOnlyStudent(): boolean {
const userStore = useUserStore();
const roles = (userStore?.roles ?? []).filter((d) => !!d);
return roles.length === 1 && roles[0] === STUDENT_ROLE_CODE;
}
/** /**
* 是否有某些权限 * 是否有某些权限
* @param value 权限字符或字符数组 * @param value 权限字符或字符数组
+11 -1
View File
@@ -79,7 +79,11 @@
<div class="sidebar-footer"> <div class="sidebar-footer">
<p class="user-name">{{ userName }}</p> <p class="user-name">{{ userName }}</p>
<div class="footer-actions"> <div class="footer-actions">
<button class="admin-btn" type="button" @click="goAdmin" <button
v-if="showAdminEntry"
class="admin-btn"
type="button"
@click="goAdmin"
>进入后台 >进入后台
</button </button
> >
@@ -319,6 +323,7 @@ import { useUserStore } from "@/store/modules/user";
import { logout } from "@/utils/page-tab-util"; import { logout } from "@/utils/page-tab-util";
import { copyText } from "@/utils/common"; import { copyText } from "@/utils/common";
import { getToken } from "@/utils/token-util"; import { getToken } from "@/utils/token-util";
import { isOnlyStudent } from "@/utils/permission";
type ChatRole = "user" | "assistant"; type ChatRole = "user" | "assistant";
type ChatMode = "chat" | "writing" | "image"; type ChatMode = "chat" | "writing" | "image";
@@ -377,6 +382,11 @@ const userName = computed(
(loginUser.value.userId ? `用户${loginUser.value.userId}` : "未登录") (loginUser.value.userId ? `用户${loginUser.value.userId}` : "未登录")
); );
/**
* 是否展示「进入后台」入口:纯学生身份隐藏
*/
const showAdminEntry = computed(() => !isOnlyStudent());
const canSend = computed( const canSend = computed(
() => content.value.trim().length > 0 && !loading.value () => content.value.trim().length > 0 && !loading.value
); );