11 KiB
栏目设置页面重构计划(对照老系统 /Profession/Moudule)
创建日期:2026-09-26 执行状态(2026-09-26):任务 1~5 全部完成,并已用 lijing 账号完成 CAS 登录全流程走查。 走查通过项:菜单加载(GetUserMod → 字段管理/上级栏目/栏目设置/统计/局端统计);添加组(名称+上级+字段绑定一步创建"教学设计"); 发布表单预览(固定 6 字段+已绑定"获奖名称");备注说明;积分设置(发布2/评论1);修改 tab 绑定切换与改名; 编辑组/组排序批量弹窗;左侧勾选启停;保存双请求(OrderBy→EditMoudule→MouduleList);刷新后持久化; 数据库直查确认(sort_order/is_check/field_ids/remark/send_points/comm_points 全部正确);审计日志 sys_operation_log 落库。 后端 OrderBy 已支持 TopModuleTypes(mvn compile 通过,8107 已重启生效); 年级段字典扩充为全学段 13 项;
npm run build通过。 待办:开放用户选人组件接入(现为 ID 文本框);前台 ProfessionView 的发布/列表页与此配置联动走查。 参考页面:https://oa.bestsch.com/Profession/Moudule(账号 lwj,已实测登录并逐区研究 + 对照 ProfessionOld/src/page/Profession_Moudule2.vue 源码确认保存流程) 目标文件:E:\YHXT\view\ProfessionConsole\src\views\profession\ModuleSetting.vue(重写) 配套:src/api/module/profession.ts(微调)、后端MouduleService.orderModules(补 TopModuleTypes)
一、老页面逻辑实录(2026-09-26 实测)
1.1 整体布局
┌─────────────┬──────────────────────────────────────┐
│ 左:栏目组 │ 右:选中栏目配置 │
│ [➕][✏][⇅][🗑] │ ┌ 栏目名:111 │
│ ☑ 111 ←选中 │ │ 发布表单预览: │
│ ☑ 222 │ │ 标题(必填input) 年级段(下拉) │
│ ☑ 33 │ │ 学科(下拉) 是否公开(必填单选) │
│ ☑ 123 │ │ 内容(富文本) 添加附件(≤200MB) │
│ ☑ 369 │ │ …已绑定自定义字段(按类型渲染) │
│ (可拖拽排序) │ ├ Tabs: [备注|修改|积分设置] │
│ │ │ 备注: 备注说明 textarea │
│ │ │ 修改: 字段拖拽绑定/排序列表 │
│ │ │ 积分设置: 发布积分数/评论积分数 │
├─────────────┴──────────────────────────────────────┤
│ [保存] ← 整页唯一 │
└────────────────────────────────────────────────────┘
1.2 左侧栏目组列表
- 4 个图标按钮(Tooltip):
添加组/编辑组/组排序/删除组 - 拖拽列表(vuedraggable):每项 = 复选框(勾选=启用 IsCheck)+ 栏目名
- 勾选/取消、拖拽排序:只改本地状态,不发请求;由底部「保存」统一提交(实测确认)
- 点击栏目名:选中该栏目(高亮),右侧加载其配置(
Getdatelist?SerID=)
- 区局下发栏目(SchSerID≠userSchSerID):不可编辑/删除(老代码约束)
1.3 右侧面板
- 发布表单实时预览(所见即所得,教师端发布页就长这样):
- 固定字段:标题(必填 input)/ 年级段(下拉)/ 学科(下拉)/ 是否公开(必填单选 是/否)/ 内容(富文本)/ 添加附件(提示 ≤200MB)
- 已绑定的自定义字段按字段类型渲染对应控件(input/select/radio/checkbox/date)
- Tabs 三页签:
备注:备注说明 textarea(rows=6)修改:自定义字段绑定/排序列表(draglist):- 固定 6 字段(标题/年级段/学科/是否公开/内容/附件)置灰禁用、始终绑定
- 自定义字段:高亮=已绑定,点击切换绑定,拖拽排序
- 末尾「添加」按钮(引导去字段管理新增字段)
积分设置:发布积分数 / 评论积分数(InputNumber,栏目级覆盖,0=全局默认)
1.4 四个弹窗(实测 DOM)
| 弹窗 | 内容 | 提交 |
|---|---|---|
| 添加组(自定义模块添加) | 模块名称(必填) + 上级栏目下拉(默认"无") + 自定义字段绑定拖拽列表(固定字段置灰) | CreateMoudule:MoudleName/TopModuleType/Pid/MoudleSort/OpenStrid/remark/ModuleAuthority —— 创建时一步带字段绑定 |
| 编辑组(自定义模块编辑) | 提示"排序号为正整数,1 最靠前" + 表格:序号/组名/上级栏目(行内下拉)/排序号(行内输入),批量编辑 | 随「保存」的 OrderBy 提交(TopModuleTypes 列) |
| 组排序 | 提示 + 表格:序号/组名/排序号,批量编辑 | 同上(StrSort 列) |
| 删除组 | 确认后删除选中/勾选的栏目 | DeleteMoudule(ids) |
1.5 「保存」按钮 = 双请求(源码 doAddsave() 确认)
GET OrderBy:StrID(列表顺序的栏目id串) /StrSort/TopModuleTypes(上级栏目串) /namestr(名称串) /Checkstrs(启用串) —— 一次提交左侧列表的顺序+名称+勾选+上级栏目POST doAddsave:SerID(当前选中栏目) /Remark/Pid(发布积分) /MoudleSort(评论积分) /OpenStrid('all'→空) /ModuleAuthority(绑定字段SerID CSV) —— 保存右侧当前栏目的字段绑定+备注+积分+开放用户
1.6 老页面接口清单
| 接口 | 用途 |
|---|---|
| Profession_list/MouduleList | 栏目列表(含 SchSerID/userSchSerID 判只读、IsCheck、sort) |
| Profession_list/BindFieldList | 字段库全集(绑定候选) |
| Profession_list/TopMouduleList?IsUsing=1 | 上级栏目下拉(仅启用) |
| Profession_list/Getdatelist?SerID= | 选中栏目详情:SerID/MoudleName/SendpointsNum/CommpointsNum/OpenStrid/Remark/itemlist[字段(含 ischeck 绑定态)] |
| Common/reviewprocess/GetGradeList | 年级段(该校实测:高一/高二/高三/预备/初一/初二/初三) |
| Common/reviewprocess/GetSubList | 学科(语文/数学/英语/物理/化学/生物/信息技术/…) |
| CreateMoudule / OrderBy / doAddsave / DeleteMoudule / EditMoudule | 写操作 |
二、新版现状 vs 老页面差距
| 方面 | 老页面 | 新版现状 | 结论 |
|---|---|---|---|
| 布局 | 左右两栏 + 底部统一保存 | 单栏表格 | 重写布局 |
| 栏目列表 | 复选框(启用)+拖拽排序+点选 | 表格行 | 改为拖拽列表 |
| 增删改 | 左侧 4 按钮 + 3 种弹窗(添加组一步带字段绑定;编辑组/组排序为批量表格) | 行内按钮 + 单条弹窗 | 改为 4 按钮 + 弹窗 |
| 字段绑定 | 右侧「修改」tab:点击绑定/解绑 + 拖拽排序;固定字段置灰 | 弹窗 CheckboxGroup | 改为 draglist 交互 |
| 表单预览 | 右侧实时渲染发布表单 | 无 | 新增 |
| 备注/积分 | 右侧 Tabs(备注/积分设置) | 弹窗字段 | 移入 Tabs |
| 开放用户 | OpenStrid('all'=不限) | openUserIds 文本框 | 保留文本框(选人组件后续接) |
| 上级栏目 | 列表平铺不显示,仅在添加/编辑弹窗设置 | 表格列显示 | 移入弹窗(列表可省) |
| 保存 | 底部一个按钮 = OrderBy + doAddsave 双请求 | 行内即时提交 | 改为底部保存双请求 |
| 年级段字典 | 按校返回(初高中 7 项) | 后端静态 小学/初中/高中 | 预览展示用,后端字典扩充为全学段 |
| modId | 120 | 已对齐 | 不变 |
三、修改任务
任务 1:后端 OrderBy 支持 TopModuleTypes(小改)
ProfessionService → MouduleService.orderModules:新增可选参数 topModuleTypes(与 StrID 同序的上级栏目 id 串,0=无),逐条更新 topModuleId;Controller OrderBy 增加对应 @RequestParam。
验收:mvn compile 通过;批量修改上级栏目后 MouduleList 返回新值。
任务 2:后端年级段字典扩充(小改)
ProfessionDicts.gradeList():小学(一年级六年级)/ 预备 / 初一 / 初二 / 初三 / 高一 / 高二 / 高三,value 保持数字稳定(16 小学、7 预备、810 初中、1113 高中);gradeName() 同步。旧数据 value(1/2/3)兼容映射。
任务 3:API 模块微调
profession.ts:orderBy 增加 TopModuleTypes 透传;其余复用现有端点(CreateMoudule/EditMoudule/DeleteMoudule/ModuleFields/FieldAll/TopList/MouduleList)。
任务 4:ModuleSetting.vue 重写(核心)
按老页面布局重写:
- 左右两栏(左 7 右 17,对齐老页面比例):
- 左:
添加/编辑/排序/删除4 个图标按钮(Tooltip)+ vuedraggable 列表(复选框=启用,点名称=选中加载右侧) - 右:栏目名标题条 + 发布表单预览(固定字段 + 已绑定字段按类型渲染,禁用态)+ Tabs(备注 / 字段绑定 / 积分设置)+ 底部「保存」
- 左:
- 字段绑定 tab:draglist 风格——固定 6 字段置灰;自定义字段点击切换绑定(高亮)、拖拽排序;「添加」按钮跳转字段管理页
- 三个弹窗:
- 添加组:名称 + 上级栏目下拉 + 字段绑定列表(复用右侧绑定组件逻辑)→ CreateMoudule
- 编辑组:批量表格(组名只读 / 上级栏目行内下拉 / 排序号行内输入)→ 并入待保存状态(由底部保存统一提交 OrderBy)
- 组排序:批量表格(组名 / 排序号)→ 同上
- 删除组:确认弹窗 → DeleteMoudule
- 底部保存:一次点击 =
orderBy(StrID/StrSort/TopModuleTypes/namestr/Checkstrs) +edit(当前选中栏目 fieldIds/remark/sendPoints/commPoints/openUserIds) 双请求;成功后刷新列表 - 区局下发(
readonly=true)行:复选框/拖拽/编辑/删除禁用 - 交互细节对齐:未选中栏目时右侧空态提示;切换栏目未保存的绑定/排序本地保留提示;
Message反馈文案沿用老版风格
任务 5:验证
npm run build(Console)通过- 后端
mvn compile通过 - dev server 热更新后走查:添加组→绑定字段→拖拽排序→勾选启停→保存→列表与右侧状态一致
四、不做 / 后续
- 开放用户选人组件(UserCheckModal 接 GetSchoolAll):本期保留文本框,联调阶段接入
- 附件预览里的上传为禁用展示(预览态),真实上传在教师发布页(RecordEdit 已实现)
- 老系统年级段"按校下发"的个性化字典:本期用全学段静态字典