title: E9 明细2 行状态控制(评审锁定 + 提交标记) created: 2026-04-24 updated: 2026-04-24 type: solution tags: [js, detail, e9, readonly, submit] related: [oa/dev-solutions/detail1-row-state-control.md]
泛微 E9 明细2 行状态控制(评审锁定 + 提交标记)
场景
在明细表 2 中,实现基于评审状态字段的行级锁定:
pdsfwjx_mx2 == "1"(评审未提交)→csxmsm和sftgcs设为只读,禁用该行勾选- 否则 → 两个字段均可编辑(属性 3)
- 提交流程前:自动将所有行的
pdsfwjx_mx2设为"1",下次打开时自动锁定sftgcs设为只读,禁用该行勾选 - 否则 → 两个字段均可编辑(属性 3)
- 提交流程前:自动将所有行的
pdsfwjx_mx2设为"1",下次打开时自动锁定## 完整代码
// 明细字段转 ID(遵循动态映射规范)
const id_csxmsm = WfForm.convertFieldNameToId("csxmsm", "detail_2");
const id_sftgcs = WfForm.convertFieldNameToId("sftgcs", "detail_2");
const id_pdsfwjx_mx2 = WfForm.convertFieldNameToId("pdsfwjx_mx2", "detail_2");
/**
* 判断明细行是否评审未提交(pdsfwjx_mx2 == "1")
* 若是:锁定 csxmsm、sftgcs 为只读,并禁用该行的勾选
* 若否:保持可编辑
*/
function toggleDetailRows() {
const rowArr = WfForm.getDetailAllRowIndexStr("detail_2").split(",");
for (const rowIndex of rowArr) {
const value = WfForm.getFieldValue(id_pdsfwjx_mx2 + "_" + rowIndex);
const isLocked = value === "1";
// 1=只读,3=可编辑
const attr = isLocked ? 1 : 3;
WfForm.changeFieldAttr(id_csxmsm + "_" + rowIndex, attr);
WfForm.changeFieldAttr(id_sftgcs + "_" + rowIndex, attr);
// 锁定状态禁用明细行勾选
if (isLocked) {
WfForm.controlDetailRowDisableCheck("detail_2", rowIndex, true);
}
}
}
// 页面加载时初始化各行状态
jQuery(document).ready(toggleDetailRows);
// 提交前:将所有行的 pdsfwjx_mx2 设为 "1"(标记为已提交,下次打开将锁定)
WfForm.registerCheckEvent(WfForm.OPER_SUBMIT, function (callback) {
const rowArr = WfForm.getDetailAllRowIndexStr("detail_2").split(",");
for (const rowIndex of rowArr) {
WfForm.changeFieldValue(id_pdsfwjx_mx2 + "_" + rowIndex, { value: "1" });
}
callback(); // 继续提交流程
});
| API | 用途 |
|---|---|
convertFieldNameToId(name, detail) |
字段名转 ID(自带 field_ 前缀) |
changeFieldAttr(field + "_" + row, 1/3) |
1=只读, 3=可编辑 |
controlDetailRowDisableCheck(detail, row, true) |
禁用该行勾选 |
registerCheckEvent(OPER_SUBMIT, cb) |
提交前拦截,调 callback() 放行 |
⚠️ 注意事项
convertFieldNameToId返回值已带field_前缀,拼接行号时不要再加field_- 明细字段值读取必须加行号:
fieldId + "_" + rowIndex - 与明细1 的方案区别:此方案更简洁,不需要区分必填/可编辑,只有只读/可编辑两种状态