前端已把 NoticeFront 的 wangEditor 与自绘「通知对象」控件 1:1 搬进助手表单,
后端补上这两个控件所需的契约:
- ToolParam / FormField 新增:
· pickerSources:选人弹窗的**数据源页签**(形如 {name, 模块内相对地址}),
由 AgentOrchestrator 拼上模块前缀后下发(沿用「只写相对路径」的铁律);
· richTextUploadPath / richTextPreviewPath:正文插图的上传与预览地址。
- AgentOrchestrator:把 resolveUploadPath 抽出通用形态 resolveModulePath(幂等、只接受
模块内相对路径);buildForm 为 widget=userpicker 下发 pickerSources;
optionCall 强制改写 widget 的白名单放行 userpicker(否则会被降级成 select)。
- NoticeTools:notify.publish 与 notify.editNotice 的 receiveList 改为 userpicker,
两个数据源为「基础平台」/api/base/GetSchoolAll 与「自定义组」
/api/contacts/GetGroupTree?type=1;content 走 richtext。
测试:NotifyIntentFormTest / IntentDirectFormTest 补 pickerSources 断言
(**只写相对路径**,不带前缀 —— 前缀拼错是本项目反复出过的坑),
ModuleFormParityTest 补 userpicker 取值口径断言(字符串原样透传,不得包成数组)。
mvn -o test:Tests run: 135, Failures: 0, Errors: 0,BUILD SUCCESS。
This commit is contained in:
@@ -18,7 +18,7 @@ public class FormField {
|
||||
/** 中文标签,如「开始时间」 */
|
||||
private String label;
|
||||
|
||||
/** 控件类型:text / textarea / number / date / datetime / select / multiselect / file / scopes / flow / radio / switch */
|
||||
/** 控件类型:text / textarea / number / date / datetime / select / multiselect / file / scopes / flow / radio / switch / richtext / userpicker */
|
||||
private String widget;
|
||||
|
||||
/** 数据类型:string / integer / number / boolean / array */
|
||||
@@ -40,6 +40,37 @@ public class FormField {
|
||||
/** {@code widget=file} 时是否允许多个附件 */
|
||||
private boolean multiple;
|
||||
|
||||
/**
|
||||
* {@code widget=richtext}(富文本正文)时,「插入图片」的上传地址(**已带模块前缀**的绝对相对路径),
|
||||
* 如 {@code /notice/api/file/UploadImage}。
|
||||
* <p>与附件同理:模块的上传接口只认浏览器 CAS 会话,必须由前端带用户登录态 POST(multipart)。
|
||||
*/
|
||||
private String richTextUploadPath;
|
||||
|
||||
/**
|
||||
* {@code widget=richtext} 时,正文内图片的预览地址模板(**已带模块前缀**,含 {@code {id}} 占位),
|
||||
* 如 {@code /notice/api/file/Preview?id={id}} —— 前端拿到上传返回的文件 id 后替换占位符,
|
||||
* 得到可直接放进 {@code <img src>} 的地址。
|
||||
*/
|
||||
private String richTextPreviewPath;
|
||||
|
||||
/**
|
||||
* {@code widget=userpicker}(通知对象)的**数据源页签**,形如
|
||||
* {@code [{name:"基础平台", call:{...}}, {name:"自定义组", call:{...}}]}。
|
||||
*
|
||||
* <p>搬运自通知公告模块页 {@code components/UserCheckModal.vue} 的两个页签,
|
||||
* 每个 {@code call} 都已经是「**带模块前缀**的浏览器代取调用」(同 {@link #optionCall} 的形态),
|
||||
* 由前端用用户登录态去取原始**嵌套树**(不做拍平 —— 拍平会丢掉层级,树就画不出来)。
|
||||
*/
|
||||
private List<PickerSource> pickerSources;
|
||||
|
||||
/** {@code widget=userpicker} 的一个数据源页签:页签名 + 浏览器代取调用 */
|
||||
@lombok.Data
|
||||
public static class PickerSource {
|
||||
private String name;
|
||||
private com.yunhai.agent.model.BrowserToolRequest.BrowserCall call;
|
||||
}
|
||||
|
||||
/**
|
||||
* 「全部」哨兵值(如 {@code ALL})与其显示名(如「全部宿舍」)。
|
||||
* <p>前端把它作为多选的第一个选项;用户只勾它 → 提交 {@code ["ALL"]};
|
||||
|
||||
Reference in New Issue
Block a user