编辑 | blame | 历史 | 原始文档

培训任务表单 · JNPF 设计器配置

对着设计器逐项勾。表单名建议:**培训任务**;设计表:tms_task;主键系统自带。

老表:LIMS_TRAINING_TASK。发布后还会写个人任务、培训记录、视频进度、考试计划,那些用按钮事件/代码块,不要全堆进这一张表单。


1. 表单属性

建议值
表单类型 普通表单(跨月/在岗/临时走流程时,另做流程表单或本表开启流程)
表名 tms_task
列表 开启
树形
单据规则 培训任务流水号 → serial_no;发布后再生成培训编号 → task_no
权限 培训管理员可增改发;学员只读个人任务,不进本表

状态驱动编辑(整表公式,后文字段「能否编辑」都引用它):

  • 新增 / status == 培训未发布:可编辑
  • status == 培训已发布:只许改地点冲突以外的非关键字段,建议整单只读,仅保留终止、归档、发起评估
  • status == 培训已完成培训已终止:只读

2. 页面布局(4 个页签 + 1 个子表)

页签 放什么
基本信息 主题、编号、来源、分类、方式、状态
时间地点 开始/结束/关闭、月份、地点
人员组织 对象、培训师、发起人、部门
教材考核 教材、视频、考核、试卷、掌握程度、评估状态
底部子表 教材/附件清单 tms_task_file

不要把签到人员子表做进本表(那是培训记录的子表)。本表用「关联列表」挂:个人任务、培训记录。


3. 字段清单(设计器逐行配)

控件名按 JNPF 6.x:单行 / 多行 / 数字 / 日期时间 / 下拉 / 开关 / 用户 / 组织 / 岗位 / 关联表单 / 弹窗选择 / 附件 / 流水号。

3.1 页签「基本信息」

字段名 显示名 控件 必填 默认 数据源 能否编辑 说明
subject 培训主题 单行 未发布 老 LTT01
serial_no 任务流水号 流水号 规则自动 单据规则「培训任务流水号」 只读 老 LTT49,保存即生成
task_no 培训编号 单行 只读 老 LTT19,**发布时**生成,列表检索用
first_no 首次编号 单行 只读 老 LTT50,二次培训才有
category 培训分类 下拉 字典:来源类型里的分类,或单独「培训分类」 未发布 老 LTT04。选项至少含:计划培训、临时培训。送审/发布按钮靠它判断
train_mode 培训方式 下拉 字典「培训方式」 未发布 老 LTT05。现场讲课/现场开课 → 地点必填;在线学习 → 教材必填
source_type 来源类型 下拉 字典:年度计划 / 岗位计划 / 临时培训 / 文件培训 未发布 老 LTT35。年计划=1、临时=3
source_form 来源单据 关联表单 条件必填 按 source_type 切:年计划 / 岗计划 / 临时需求 未发布 带出 source_no、source_item_id、主题、对象等
source_no 来源编号 单行 关联带出 只读 老 LTT23
source_item_id 来源子表ID 单行 关联带出 隐藏 老 LTT20 / LTT54,归档回写计划行
source_kind 来源类别 下拉 字典「来源类别」 隐藏或只读 老 LTT55
status 任务状态 下拉 培训未发布 字典「任务状态」 只读 老 LTT16,只允许按钮改
second_flag 二次培训 开关 只读 老 LTT63

联动(基本信息)

  1. source_type 变化 → 切换 source_form 关联的目标表单;清空已选来源。
  2. 选中年计划子表行 → 带出:subject←内容,train_mode,trainees,teacher,exam_type,mastery,month,material。
  3. 选中临时需求子表行 → 带出:subject,start_time,train_mode,exam_type,material,exec_dept,starter,belong_dept。
  4. category == 临时培训 时,列表「发布」隐藏,走「临时送审」。
  5. 岗计划且计划类型=在岗培训:隐藏「发布」,只显示「送审」(老 fabu:在岗培训需走送审)。

3.2 页签「时间地点」

字段名 显示名 控件 必填 默认 说明
start_time 培训开始时间 日期时间 老 LTT02。未发布时可改。校验:不得早于当前时间(已发布回看时跳过)
end_time 培训结束时间 日期时间 老 LTT21。须 ≥ start_time
close_time 培训关闭时间 日期时间 老 LTT14。须 ≥ end_time
month 培训月份 下拉 1-12 取 start_time 的月 老 LTT47。年计划带入。**跨月判断用 start_time 的月份,不是这个字段单独判断**
place 培训地点 关联表单「培训地点」 条件 老 LTT22(前端校验用的地点)/ LTT03。方式含「现场」时必填
place_occupied 地点占用 开关 隐藏,接口回写;冲突时阻止保存
publish_time 发布时间 日期时间 只读,发布按钮写入,老 LTT31
plan_time 通知用培训时间 日期时间 同 start_time 可隐藏,老 LTT11
next_train_time 下次培训时间 日期 老 LTT37
notified 是否已通知 开关 只读,老 LTT12

校验(保存 / 发布前,公式或 JS)

start_time <= end_time
end_time <= close_time
若可编辑且 start_time < 当前时间 → 报「开始时间不能小于当前时间」
若 train_mode 含 现场讲课/现场开课 且 place 空 → 报「请选择培训地点」
start_time 不得早于 publish_time(发布后的二次校验,老 isEarly)
同一 place 在 [start_time, end_time] 内不得与其他未终止任务重叠(老地点占用)

地点变化时,若 place 被清空,同步清空显示名(老 emptyPlace)。

3.3 页签「人员组织」

字段名 显示名 控件 必填 多选 说明
trainees 培训对象 用户选择(可兼岗位/部门,能展开到人) 老 LTT06。发布时按人拆个人任务
teacher 培训师 用户选择 条件 老 LTT07。自学/外派可空
author 制定人 用户 老 LTT13,默认当前用户
starter 发起人 用户 老 LTT30,临时需求=申请人
belong_dept 所属部门 组织 老 LTT33
start_dept 发起部门 组织 不要和 source_type 共用字段
exec_dept 执行部门 组织 老 LTT36 / LTT52
train_dept 培训部门 组织 老 LTT42
floor_no 楼层 单行 老 LTT65,岗计划带出
area_no 车间/功能区 单行 老 LTT64

对象组件建议:JNPF「用户选择」开启部门/岗位,保存存用户 ID 数组。发布事件里按 ID 展开,不要把部门 ID 直接写进个人任务。

3.4 页签「教材考核」

字段名 显示名 控件 必填 显示条件 说明
material_id 培训教材 关联表单 tms_material 条件 在线学习必填 带出 material_no、media_no、version、是否视频
material_no 教材编号 单行 只读,老 LTT17
media_no 媒体号 单行 只读,老 LTT18
version 资料版本 单行 只读,老 LTT60
video_id 培训视频 关联表单/附件 教材类型=视频时显示 老 LTT38 / LTT22
exam_type 考核方式 下拉 字典:考试 / 实操 / 评估 / 无。老 LTT29、前端校验读的是 LTT09,JNPF 只保留 exam_type
paper_id 试卷 关联表单「试卷」 条件 exam_type==考试 老 LTT25。送审/发布前必填
exam_start 开考时间 日期时间 exam_type==考试 对应挂卷 LTT26,**不要**和个人任务来源表混用
exam_end 结考时间 日期时间 exam_type==考试 老 LTT27
mastery 掌握程度 下拉 了解/熟悉/掌握,老 LTT48
eval_status 课程评估状态 下拉 只读。未发起 / 已发布 / 已停止。老 LTT59
hours 学时 数字 可从岗计划课时带入

显示/必填公式

place 必填:train_mode 包含「现场」
material_id 必填:train_mode 包含「在线」或「自学」
paper_id 必填:exam_type == 考试
teacher 必填:train_mode 不是自学/外派

3.5 子表 tms_task_file(教材/附件清单)

对应老 LIMS_TRAINING_TASK_SUB

字段名 显示名 控件 必填
file_no 编号 单行 / 关联教材带出
file_name 文件名称 单行
version 版本 单行
media 多媒体/附件 附件

选主表教材后,可自动往子表插一行(老 setTrainTaskMedia)。

3.6 系统字段(设计器默认勾上)

创建人、创建时间、修改人、修改时间。不必再建 author,除非业务上「制定人」≠ 创建人。


4. 列表设计

字段 排序 检索
培训编号 task_no
培训主题 subject
来源类型 source_type
培训方式 train_mode
开始时间 start_time 默认倒序 日期范围
结束时间 end_time
地点 place
状态 status
培训师 teacher
发起人 starter
所属部门 belong_dept

列表按钮:新增、编辑(仅未发布)、删除(仅未发布且未生成个人任务)、发布、送审、终止、查看。

行样式:未发布灰、已发布蓝、已完成绿、已终止红。


5. 按钮(设计器「按钮设置」+ 显示条件)

按钮 位置 显示条件 动作
保存 表单 未发布 普通保存
发布任务 表单+列表 status=未发布 且 开始月份=当前月 且 category≠临时培训 且 不是在岗培训 先跑第 6 节校验,再跑发布脚本
送审 表单 未发布 且(开始月份≠当前月 或 临时培训 或 在岗培训) 提交流程
临时送审 表单 category=临时培训 提交「临时培训」流程,禁止拿计划任务走这条(老 tempsend)
计划送审 表单 category≠临时培训 且 跨月 提交年/岗计划任务流程(老 notempsend / tempTraining 互斥)
实操送审 表单 exam_type=实操 走实操考核流程;非实操点了要提示「考核方式不是实操考试」
终止 表单+列表 已发布且未终止 调终止,防重复(老 isTaskStop)
归档 表单 已发布 校验全员签到/合格后改已完成,回写计划行
发起课程评估 表单 已发布且 eval_status=未发起 生成评估单,eval_status=已发布;已发起则提示勿重复
二次培训 表单 已完成或不合格需补训 复制任务,second_flag=开,first_no=原 task_no
在线签到入口 表单 已发布 先调「方式是否允许在线签到」,不允许则提示

当月 vs 跨月(老 songshenDate)

  • start_time 的月份。
  • 等于当前月 且 不是临时培训:提示「执行时间在当月,无需送审,点发布即可」,拦截送审。
  • 不等于当前月:提示「不在当前月份,如需提前执行请先送审」,拦截直接发布。
  • 临时培训:即使当月也走临时送审,不走发布。

6. 发布前校验(按这个顺序做公式 / JS)

  1. subject、trainees、start_time、end_time、close_time 非空
  2. 时间关系:现在 ≤ 开始 ≤ 结束 ≤ 关闭(已保存回看跳过「现在」)
  3. 现场方式必须有 place
  4. 在线/自学必须有 material_id
  5. exam_type=考试 必须有 paper_id(老提示「请选择试卷」)
  6. 地点时段未占用
  7. 当月才能点发布;跨月请送审
  8. 临时培训不能点发布
  9. 在岗培训不能点发布,走送审
  10. 来源单据若已生成过任务,拦截(老 checkPxxqPlan / isExist)

7. 发布成功脚本(代码块对照)

伪代码,JNPF 用「数据接口 + 代码块」实现:

status = 培训已发布
publish_time = now
if task_no 空: task_no = 生成培训编号
notified = 是

for user in 展开(trainees):
    插入 tms_person_task(
        task_id, train_no=task_no, subject, start_time, end_time, place,
        category, train_mode, user_id=user, teacher,
        material_no, video_id, person_status=未完成,
        exam_type, source_table=tms_task
    )
    若有视频章节:
        插入 tms_video_learn(人 × 章节, progress=0, pass_flag=未完成)

插入 tms_record 主表(主题/编号/地点/方式/task_id/archived=否)
for user in 展开(trainees):
    插入 tms_record_person(user, sign_time 空, pass_flag 空)

若 exam_type==考试 且 paper_id:
    插入或更新 tms_exam_plan(task_id, paper_id, exam_start, exam_end, status=1)

若来源是年计划子表: 该行 row_status=任务已发布
若来源是岗计划子表: 同上

发消息给 trainees + teacher

归档脚本:

校验:每个 record_person 都有 sign_time;exam_type 需要成绩/合格的,LZC19 等价字段已填
status = 培训已完成
record.archived = 是
来源计划行 row_status = 任务已完成
每人写一条 tms_person_file 子表(主题、时间、方式、合格、培训师)
按合格结果回写上岗/资质(若该课影响上岗)

8. 关联表单「带出」映射

从年计划子表带出:

目标字段 来源
subject content / LATPC03
train_mode LATPC04
trainees LATPC05
teacher LATPC07
exam_type LATPC08
material_id LATPC12
mastery LATPC19
month LATPC02
source_item_id 子表id
source_no 主表 plan_no
source_type 年度计划

从教材带出:material_no、media_no、version;类型=视频则赋 video_id。

从临时需求带出:见总册 3.3。


9. 流程(仅送审走)

节点建议(按现场改):发起人 → 部门负责人 → 质量部 → 结束。

流程表单可复用本表,流程中锁定来源/对象,允许改时间地点。

通过后不要再手工点发布:流程结束事件直接跑第 7 节发布脚本。

驳回:保持未发布,可改后重提。


10. 和「个人任务」「培训记录」的分工

谁用 表单 不要做的事
培训管理员 本表 培训任务 不要在本表里签到、打分
学员 tms_person_task 不要改对象/教材/状态机
签到/成绩 tms_record 子表 不要把签到人做成任务子表

本表设计器「关联列表」建议挂两个:

  • 个人任务:过滤 task_id = 当前主键
  • 培训记录:过滤 task_id = 当前主键

11. 设计器勾选顺序(半小时过一遍)

  1. 新建表 tms_task,先加第 3 节全部字段(先不要子表)
  2. 配字典:任务状态、培训方式、考核方式、来源类型
  3. 拖 4 个页签,把字段丢进去
  4. 配必填和显示条件
  5. 配流水号 serial_no
  6. 加子表 tms_task_file
  7. 配列表列和行按钮
  8. 配发布/送审显示条件
  9. 发布校验公式
  10. 发布代码块先打日志,用一条测试数据跑通再写个人任务

配完字段后,下一步通常是:同样格式拆「个人任务」学员端,或先把发布代码块写成 JNPF 数据接口。