- 说「我要请假」这类只有意图的短句时,直接弹出表单不再过模型:
后端 IntentShortcut 在编排器入口做「去空白标点 + 剥前后缀后正好等于标准说法
且原句 ≤12 字」的窄匹配,命中即跳过 LLM 直接下发表单。
- 按身份分离:学生 → leave.submit(提交申请),教师/管理员 → leave.register
(帮学生登记,必填 classId+stuId);RolePolicy 把两者分别归入 STUDENT_ONLY
与 STAFF_ONLY,模型视野里天然只有一个,不可能选错。
- 表单字段由各自必填参数推导;下拉选项改为后端下发 optionCall(含 {{占位符}}),
由前端带用户登录态代取后按 valueKey/labelKey 映射(模块 /api/* 服务端必然 302)。
stuId 依赖 classId,选完班级才解锁学生名单。
- 抽出 utils/module-session.ts(会话预热 / 带登录态调模块 / 字典项解析),
Chat.vue 与 FormCard.vue 复用。
- 例句与提示改为「我要请假」「帮学生登记请假」。
This commit is contained in:
@@ -56,6 +56,20 @@ export interface FormField {
|
||||
* 为 true 时说明「选项能用,但可能不含学校自定义的项」,前端给一句轻提示即可,不阻塞填写。
|
||||
*/
|
||||
optionsFallback?: boolean;
|
||||
/**
|
||||
* 「浏览器代取选项」的调用描述:业务模块的字典接口(班级、学生名单…)只认浏览器 CAS 会话,
|
||||
* 服务端代取必然 302,所以由前端带**用户自己的登录态**去取原始字典,再渲染成下拉。
|
||||
*
|
||||
* <p>{@link pathAndQuery} 里可能含 {@code {{字段名}}} 占位符(见 {@link dependsOn}),
|
||||
* 依赖字段有值后才能替换并发起请求。
|
||||
*/
|
||||
optionCall?: BrowserToolCall;
|
||||
/** 本字段选项依赖的先序字段名(如「学生」依赖「班级」);依赖未填时清空并提示先选 */
|
||||
dependsOn?: string[];
|
||||
/** 从字典返回对象里取哪个字段作为选项「值」(如 classId / stuId) */
|
||||
valueKey?: string;
|
||||
/** 从字典返回对象里取哪个字段作为选项「显示名」(如 className / stuName) */
|
||||
labelKey?: string;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user