更多ruoyi-nbcio功能請看演示系統(tǒng)
gitee源代碼地址
前后端代碼:?https://gitee.com/nbacheng/ruoyi-nbcio
演示地址:RuoYi-Nbcio后臺管理系統(tǒng)
? ? ? 這節(jié)主要講條件節(jié)點與并發(fā)節(jié)點的有效性檢查,主要是增加這兩個節(jié)點的子節(jié)點檢查,因為這兩個節(jié)點需要增加審批人的子節(jié)點才能有效,否則檢查通不過。
? ?1、首先增加一個子節(jié)點的有效性檢查函數(shù)
/**
* 校驗子節(jié)點必填項完整性,目前主要是針對條件節(jié)點與并發(fā)節(jié)點
* @param {Node} node - 節(jié)點數(shù)據(jù)
*/
static checkChildNode ( node, parent ) {
let valid = false
if ( this.isConditionNode( node ) ) {
if (!isEmpty(node.childNode)) {
valid = true
}
}
if ( this.isConcurrentNode( node ) ) {
if (!isEmpty(node.childNode)) {
valid = true
}
}
return valid
}
2、檢查所有節(jié)點的時候也增加并發(fā)節(jié)點檢查過程
/**
* 判斷所有節(jié)點是否信息完整
* @param {Node} processData - 整個流程圖數(shù)據(jù)
* @returns {Boolean}
*/
static checkAllNode ( processData ) {
let valid = true
const loop = ( node, callback, parent ) => {
!this.checkNode( node, parent ) && callback()
if ( node.childNode ) loop( node.childNode, callback, parent )
if ( !isEmptyArray( node.conditionNodes ) ) {
node.conditionNodes.forEach( n => loop( n, callback, node ) )
}
if ( !isEmptyArray( node.concurrentNodes ) ) {
console.log("node.concurrentNodes ", node.concurrentNodes)
node.concurrentNodes.forEach( n => loop( n, callback, node ) )
}
}
loop( processData, () => valid = false )
return valid
}
}
3、單個檢查節(jié)點修改如下,特別是條件節(jié)點與并發(fā)節(jié)點的修改
/**
* 校驗單個節(jié)點必填項完整性
* @param {Node} node - 節(jié)點數(shù)據(jù)
*/
static checkNode ( node, parent ) {
// 抄送人應(yīng)該可以默認自選
let valid = true
const props = node.properties
this.isStartNode( node )
&& !props.initiator
&& ( valid = false )
this.isConditionNode( node )
&& !props.isDefault
&& !props.initiator
&& isEmptyArray( props.conditions )
&& !this.checkChildNode ( node, parent )
&& ( valid = false )
const customSettings = ['myself', 'optional', 'director']
this.isApproverNode( node )
&& !customSettings.includes( props.assigneeType )
&& isEmptyArray( props.approvers )
&& ( valid = false )
return valid
}
4、構(gòu)造節(jié)點增加條件與并發(fā)的出錯處理
/* 構(gòu)造節(jié)點
modify by nbacheng 2023-11-02
*/
function NodeFactory(ctx, data, h) {
if (!data) return
console.log("NodeFactory data",data)
const showErrorTip = ctx.verifyMode && NodeUtils.checkNode(data) === false
const showChildErrorTip = ctx.verifyMode && (NodeUtils.isConditionNode(data) || NodeUtils.isConcurrentNode(data)) && NodeUtils.checkChildNode(data) === false
let res = [], branchNode = "", selfNode = null ;
if (showErrorTip) { //通用節(jié)點的錯誤檢查做特殊處理
selfNode = (
<div class="node-wrap">
<div class={`node-wrap-box ${data.type} ${ showErrorTip ? 'error' : ''}` }>
<el-tooltip content="未設(shè)置條件" placement="top" effect="dark">
<div class="error-tip" onClick={this.eventLancher.bind(ctx, "edit", data)}>!!!</div>
</el-tooltip>
{nodes[data.type].call(ctx, ctx, data, h)}
{addNodeButton.call(ctx, ctx, data, h)}
</div>
</div>
);
} else if (showChildErrorTip) { //對并發(fā)與條件節(jié)點的錯誤檢查做特殊處理
selfNode = (
<div class="node-wrap">
<div class={`node-wrap-box ${data.type} ${ showChildErrorTip ? 'error' : ''}` }>
<el-tooltip content="未設(shè)置審批人員節(jié)點" placement="top" effect="dark">
<div class="error-tip" onClick={this.eventLancher.bind(ctx, "edit", data)}>!!!</div>
</el-tooltip>
{nodes[data.type].call(ctx, ctx, data, h)}
{addNodeButton.call(ctx, ctx, data, h)}
</div>
</div>
);
} else { //正常節(jié)點的顯示
selfNode = (
<div class="node-wrap">
<div class={`node-wrap-box ${data.type} ${''}` }>
{nodes[data.type].call(ctx, ctx, data, h)}
{addNodeButton.call(ctx, ctx, data, h)}
</div>
</div>
);
}
5、效果圖如下:文章來源:http://www.zghlxwxcb.cn/news/detail-742980.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-742980.html
到了這里,關(guān)于基于若依的ruoyi-nbcio流程管理系統(tǒng)增加仿釘釘流程設(shè)計(六)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!