feat(form): 表单支持单选/勾选/快捷时段/逐天微调,请假登记表面对齐模块页
build / build-push (push) Successful in 1m28s

- ToolParam / FormField 新增控件能力:
  radio(单选按钮组)、switch(勾选框+开关值映射)、quickPeriods(快捷时段)、
  dailyExpand(按天展开)、autoPickFirst(默认选中第一项)、
  hideIfSingleOption(单选项隐藏)、placeholder(照搬模块页原文案)
- LeaveTools:
  * leave.submit / leave.register 的 leaveType 改单选按钮组并默认选中第一个
  * 请假时间补齐快捷时段与「连续请假」勾选框(勾上展开连续天数 + 逐天时段)
  * 事由 / 附件对齐模块页文案;学生端 classId 单班隐藏、教师端恒显示
- ToolExecutor.expandDailyArgs 认前端显式发来的 continuousLeaveTime
  (用户在逐天时段里做过微调就以他改的为准,不再按基准覆盖)
- 只读查询因下游 302 失败时也回传 landingPath,让「去业务系统查看」按钮有着落
This commit is contained in:
lijing
2026-10-13 16:15:51 +08:00
parent c16356db6e
commit 53b3eaa39c
7 changed files with 486 additions and 55 deletions
@@ -252,8 +252,12 @@ public class AgentOrchestrator {
ToolCallTrace trace = buildTrace(def, args, tr);
resp.getToolCalls().add(trace);
if (!def.isReadOnly()) {
resp.setWroteSomething(true);
// 写操作 → 去系统里确认结果;只读**失败**(下游 302 / 会话没建起来)→
// 同样要给「去系统里自己查看」入口,否则模型嘴上说「点下方按钮」而界面没有按钮。
if (!def.isReadOnly() || !tr.isSuccess()) {
if (!def.isReadOnly()) {
resp.setWroteSomething(true);
}
if (StringUtils.isNotBlank(def.getLandingPath())) {
resp.setLandingPath(def.getLandingPath());
}
@@ -361,8 +365,12 @@ public class AgentOrchestrator {
}
auditService.record(session.getSessionId(), caller, def, args, tr);
resp.getToolCalls().add(buildTrace(def, args, tr));
if (!def.isReadOnly()) {
resp.setWroteSomething(true);
// 写操作 → 去系统里确认结果;只读**失败**(如下游 302 / 会话没建起来)→
// 同样要给「去系统里自己查看」入口,否则模型嘴上说「点下方按钮」而界面没有按钮。
if (!def.isReadOnly() || !tr.isSuccess()) {
if (!def.isReadOnly()) {
resp.setWroteSomething(true);
}
if (StringUtils.isNotBlank(def.getLandingPath())) {
resp.setLandingPath(def.getLandingPath());
}