当前前端调用后端 IRIS 接口服务的入参结构缺少统一的会话管理机制。随着系统功能扩展,需要在每次 API 请求中携带用户身份和权限信息,以便后端进行权限验证和审计记录。
现有的 invoke 函数签名是 (code, params, pagination?),其中 pagination 作为可选的第三个参数。这种设计导致:
Goals:
session 数组作为固定字段invoke 函数签名,使参数顺序更清晰:code → params → session → paginationSessionInfo TypeScript 接口定义getDefaultSession 函数,自动从 localStorage 读取会话信息Non-Goals:
决策: invoke(code, params?, session?, pagination?)
理由:
code 和 params 是每次调用必需的session 虽然是固定的,但允许调用时覆盖(如切换用户场景)pagination 只有查询接口使用,放在最后最合理替代方案考虑:
invoke({ code, params, session, pagination }) - 过于冗长invoke(code, params, pagination?, session?) - 不符合使用频率决策: 从 localStorage 读取默认 session
理由:
替代方案考虑:
决策: 包含 18 个字段,覆盖用户、科室、医院、语言等信息
字段列表:
interface SessionInfo {
userID: string;
userCode: string;
userName: string;
locID: string;
locDesc: string;
groupID: string;
groupDesc: string;
hospID: string;
hospCode: string;
hospDesc: string;
langID: number;
langDesc: string;
changeFlag: string;
changeDesc: string;
defaultMenuType: string;
mainInterface: string;
path: string;
sessionID: string;
}
理由:
| 风险 | 缓解措施 |
|---|---|
| [风险] 后端接口不兼容新结构 | → 后端需要同步更新,在接收端兼容新旧两种结构 |
| [风险] localStorage 中无 session 数据 | → getDefaultSession 返回空对象,不会报错 |
| [风险] 现有调用代码需要修改 | → 已通过批量替换完成,非分页调用无需修改 |
| [风险] session 数据格式不一致 | → 使用 TypeScript 接口强制类型检查 |
request.ts - 添加 SessionInfo 接口和 getDefaultSession 函数invoke 函数签名basicData.ts - 9个查询接口添加 undefined 作为 session 参数system.ts - 1个查询接口添加 undefined 作为 session 参数session 数组中提取用户信息进行权限验证