- README.md 整篇是通知公告前端的副本(标题「通知公告前端」、/notice/* 路由表、 src/assets/mock/noticeapi.ts、NoticeUpload.vue、VITE_SERVICE_HOST=.../notice 等 本仓不存在的文件),仓库唯一人类可读文档描述的是另一个应用 → 按本仓实际代码重写: 启动/脚本/运行期配置优先级、路由与 modId 契约、目录要点、表单 schema 契约纪律 (行不可变→已发布版本保存不传 id)、CI 构建发布链路、验收口径(vue-tsc 不可用) - host.config.ts:注释里残留「base/prod /notice」,本应用 context-path 是 /svc-hall
- 新增独立全屏设计器:左组件库(11 类,克隆拖入+点击添加)/中多分组画布(组内排序、 跨组移动、复制删除)/右属性面板(label/key/必填/placeholder/options 批量编辑/ textarea 行数字数/number min-max/upload·image accept·maxSize·maxFiles/tip) - schema 产出严格对齐后端 FormValidator 契约:白名单 16 属性、key ^[A-Za-z0-9_]{1,64}$ 全表单唯一、_uid 与空串剔除;预览复用发起页 DynamicForm(WYSIWYG) - DynamicForm 补 checkbox(CheckboxGroup→string[])/multiselect(Select multiple)/ image(附件通道 + .dyn-thumb 缩略图)渲染 - 列表页「新建/编辑」改跳设计器,移除裸 JSON 编辑弹窗与旧预览入口;新增路由 /svc/form/designer 审计修复(本次独立复核): 1. P1 已发布表单进设计器保存**必被后端拒**(ServiceFormService 行不可变:带已发布版本 id 一律拒)→ 装载到 status≠0 时保存不传 id,由后端按 code 升版出 vN+1 草稿,页头加 Tag 提示 2. P2 字段跨组拖拽后右侧选中态被清空 → 删掉 removed 分支的 clearSelect(Sortable 先 add 后 remove 且经 nextTick 排队,清空会反手抹掉刚设的选中;字段本拖不出画布) 3. P2 maxFiles 三层语义不一致:面板写「0 不限」、渲染器视为不限、后端按上限比对 → 后端改 maxFiles>0 判定(缺省/0=不限),面板 min=1 且文案「留空不限」 4. P2 pickAllowed 保留空串:pattern:"" 到后端是可编译空正则,会把所有非空值判成格式不正确 5. P3 保存前补 label 非空、分组标题 ≤64 的前置校验(少一次后端 400) 6. P3 image 上传走 type=image(落 /upload/image/,与后端分目录一致);修正 upload 值结构注释 (UploadVo 是 {id,fileName,fileUrl,fileSize,mimeType},无 attachmentId) 验证:npm run build 通过(FormDesigner chunk 正常产出);后端 mvn test 102/102 绿。
build.yml 初始化时沿用 Notice 模板,app 名与产物名未替换: - ZIP_FILE notice-front-${TAG}.zip → svc-hall-front-${TAG}.zip - webhook app=notice → app=svc-hall 症状:svc-hall 前端构建虽绿,但 projman 建档建到 notice 名下,svc-hall 的 front tag 长期不更新。 对照约定(flow-center-front):产物名 <app>-front-<sha>.zip、webhook app=<app>。