import { alovaInstance } from "@/utils/alova/alova-iview"; import type { IModule } from "@/types/Basics"; import type { SchoolTreeNode } from "@/types/admin"; /** * 基础平台接口(notice/front 的 api/module 形态 + flow-center base.ts 同构): * 用户信息与已授权模块列表(左导航数据源)。 * * 模块行在 UserBase 按本应用(app_code=form-center)配置,path 须逐字对上 * router/routes.ts(手册 §2.2 表 v1.5 五行版)。数据范围升级位不再挂在模块行上: * T10 起由后端管理员两表(school_admin / form_admin)承载,前端只在 /admin/app 的角色设置 tab 维护它。 * * 写法与 Notice 的一处差异:Notice 用 `new Method(...)`,而 alova 3.5 的 Method 第一个 * 泛型位是 AlovaGenerics(不是响应类型),strict vue-tsc 下报 TS2344;本端改用实例方法 * `alovaInstance.Get()` 拿同一个 Method 对象、走同一套拦截器与信封解包,行为等价。 */ const BASE = "/api/base"; class BaseApi { /** 当前登录用户信息 */ getUserInfo() { return alovaInstance.Get(`${BASE}/GetUserInfo`); } /** * 当前用户已授权的模块树(左侧菜单数据源)。 * * @param appCode 可选目标应用(快应用上下文 /app/{appCode}/ 要的是那个应用的树, * 参数名按执行手册 §5 P2 定稿 appCode)。UserBase 侧 H4 未上线时后端 * 返回空树并打 warn——前端据此显示空导航,不得回落本应用树(P3 裁决)。 */ getUserMod(appCode?: string) { return alovaInstance.Get(`${BASE}/GetUserMod`, { params: appCode ? { appCode } : undefined }); } /** * 本校组织树(教师版)——选人弹窗 UserCheckModal 的 loader,形态同 notice。 * 没有 schId 入参:域只从会话推导,因此候选天然限在本校树里(跨校的人在接口层就给不出来)。 */ getSchoolAll() { return alovaInstance.Get(`${BASE}/GetSchoolAll`); } } export const baseApi = new BaseApi();