【泛微E9】流程被退回时在创建节点增加“作废”按钮,隐藏“删除”按钮
实现效果
1、当且仅当流程在审批过程中被退回至创建节点时,原右上角的“保存”按钮替换为“作废”按钮,且隐藏“删除”按钮。
2、点击“作废”按钮,流程自动流转至“作废归档”节点
3、申请人“强制收回”流程至创建节点,隐藏“删除”按钮
实现过程
工作流程表单
1、表单字段增加:isBack(选择框-下拉)、sfzfgd(选择框-下拉)、isRevoked(选择框-下拉)
2、创建节点的节点前附加操作:isBack=退回(勾选退回时触发), isBack=空值(不勾选退回时触发)
注意节点前附加操作的顺序一定要严格按照这个顺序,isBack=退回(顺序在上),isBack=空值(顺序在下)
3、创建节点的节点后附加操作:设置退回标识的DML语句:UPDATE 表单名 SET isBack = 0 WHERE requestid = {?requestid} AND isBack IS NULL
4、创建节点的isRevoked表单字段sql:SELECT CASE WHEN EXISTS (SELECT 1 FROM workflow_requestoperatelog WHERE requestid = '$requestid$' AND isinvalid = 1) THEN 1 ELSE 0 END
5、创建节点表单页面js
<script type="text/javascript">
$(document).ready(function(){ // 等待元素加载完成
// 初始检查一次
checkAndHide();
// 监听字段38359的值变化
WfForm.bindFieldChangeEvent("field38359", function(obj, id, value) {
// 当字段值变化时重新执行检查
checkAndHide();
});
});
function checkAndHide() {
var isback = WfForm.getFieldValue(WfForm.convertFieldNameToId("isBack"));
var htly = WfForm.getFieldValue(WfForm.convertFieldNameToId("htly"));
var isRevoked = WfForm.getFieldValue(WfForm.convertFieldNameToId("isRevoked"));
if((isback === '1' && htly === '1') || isRevoked === '1') {
// 隐藏删除按钮
$('.ant-menu-item:has(.wea-right-menu-item span[title="删除"]), button[title="删除"]')
.addClass('hide-delete-button');
} else {
// 如果条件不满足,确保按钮可见
$('.ant-menu-item:has(.wea-right-menu-item span[title="删除"]), button[title="删除"]')
.removeClass('hide-delete-button');
}
}
</script>
<style type="text/css">
.hide-delete-button {
display: none !important;
}
</style>
Ecode
register.js
const configs = ecodeSDK.getCom('${appId}', 'configs')
ecodeSDK.overwritePropsFnQueueMapSet('WeaReqTop', {
fn: (newProps) => {
const { hash } = window.location;
if (!~hash.indexOf('/main/workflow/req')) return newProps;
if (!window.wfform) return newProps;
const baseInfo = wfform.getBaseInfo(); // 获取流程的基础信息
const currentWorkflowId = baseInfo.workflowid; // 当前流程ID
const currentNodeId = baseInfo.nodeid; // 当前节点ID
if (configs && configs.flow) {
const flowConfig = configs.flow[currentWorkflowId];
if (flowConfig && flowConfig.enable && flowConfig.nodeid == currentNodeId) {
console.log('当前节点在配置范围内,功能已启用');
if (newProps.buttons.length >= 1) {
const isReturnedFlag = WfForm.getFieldValue(WfForm.convertFieldNameToId("isback")); // 获取标识退回的隐藏字段
if (isReturnedFlag === '1') { // 仅当流程是被退回时才显示
const originalButton = newProps.buttons[0];
const originalOnClick = originalButton.props.onClick;
// 提取公共逻辑到一个函数中
const handleButtonClick = (fieldName1, fieldValue1) => {
try {
// 修改指定字段值
WfForm.changeFieldValue(WfForm.convertFieldNameToId(fieldName1), { value: fieldValue1 });
originalOnClick();
} catch (error) {
console.error(`点击按钮时出错: ${error.message}`);
}
};
const newButton = React.cloneElement(originalButton, {
children: '作废',
type: 'primary',
onClick: () => handleButtonClick("sfzfgd", "0")
});
// 替换原按钮为"作废"按钮
newProps.buttons[0] = newButton;
}
}
} else {
console.log('当前流程未启用或节点不匹配');
}
} else {
console.log('配置信息不存在或未定义流程配置');
}
return newProps;
},
desc: '作废按钮仅在流程被退回至创建节点时显示'
});
config.js
const configs={
flow: {
// 为workflowid为310的流程的某个节点启用特定功能
310: { enable: true, nodeid: '2686' },
311: { enable: true, nodeid: '2712' }
}
};
ecodeSDK.setCom("${appId}","configs",configs);
浙公网安备 33010602011771号