type ModelContentConfig = { nodeName: string type: number local_status?: string // 填充自定义状态 p_nodeNames?: string[] // 填充自定义状态 childNode: ModelContentConfig | null lastNode_local_status?: string // 结束标记状态标记 conditionNodes?: { nodeName: string local_status?: string // 填充自定义状态 conditionList: any[] childNode: ModelContentConfig }[] } type RenderNodes = { [key: string]: 0 | 1 // 0已执行 1执行中 } export const package_modelContentConfig = (data: ModelContentConfig, renderNodes: RenderNodes) => { /**local_status: 0: 已执行(success) 1:执行中(error) // 默认未执行(info)*/ // 通过nodeName 作为唯一值 记录 每个key(nodeName) 对应的childNode 信息 const nodeNameObj: { [nodeName: string]: ModelContentConfig } = {} const fn = (data: ModelContentConfig, p_nodeNames = []) => { // console.error(data, p_nodeNames, 'data, p_nodeNames') if (!data) return data.p_nodeNames = p_nodeNames // 记录 nodeNameObj[data.nodeName] = data // const _p_nodeNames = [...p_nodeNames, data.nodeName] const _p_nodeNames = [...p_nodeNames, data.nodeName] // let has_conditionNodes = false if (data.conditionNodes && Array.isArray(data.conditionNodes)) { // has_conditionNodes = true // 条件分支节点 data.conditionNodes.forEach(v => { fn(v.childNode, _p_nodeNames) // fn(v.childNode, [...p_nodeNames]) }) } if (data.childNode) { // _p_nodeNames.push(data.nodeName) // const _p_nodeNames = [...p_nodeNames, data.nodeName] // if (!has_conditionNodes) { // _p_nodeNames.push(data.nodeName) // } // 正常子节点 fn(data.childNode, _p_nodeNames) } } fn(data) /*Object.keys(nodeNameObj).forEach(k => { const _o = nodeNameObj[k] _o.local_status = 'info' }) // 给需要修改状态的*/ console.log(nodeNameObj, 'nodeNameObj') const local_status_obj = { 0: 'success', // 已执行 1: 'error' // 执行中 } let cur_nodeName = '' /**local_status: 0: 已执行(success) 1:执行中(error) // 默认未执行(info)*/ Object.keys(renderNodes).forEach(nodeName => { // console.log(nodeName, 'nodeName') const local_status = local_status_obj[renderNodes[nodeName]] || '' const node = nodeNameObj[nodeName] if (node) { node.local_status = local_status // 执行中的key 提取出来 if (node.local_status === 'error') { cur_nodeName = nodeName } } if (nodeName === '结束') { // 给顶级加结束标签状态 data.lastNode_local_status = local_status_obj[renderNodes[nodeName]] } }) /*const cur_actionKey = Object.keys(nodeNameObj).find(nodeName => { const node = nodeNameObj[nodeName] // 执行中的key 提取出来 if (node?.local_status === 'error') { return true } }) console.warn(cur_actionKey, '当前标红 cur_actionKey') */ const curNode = nodeNameObj[cur_nodeName] as ModelContentConfig console.warn('当前标红 curNode', curNode) // 如果有执行中的 node 给父级做状态渲染 if (curNode) { const p_nodeNames = curNode.p_nodeNames || [] if (p_nodeNames.length) { p_nodeNames.forEach(nodeName => { const p_node = nodeNameObj[nodeName] // 父级node 设置为 已执行 // if (!p_node.local_status) { if (p_node) { // 如果是条件节点 if (p_node.conditionNodes && Array.isArray(p_node.conditionNodes)) { const idx = p_node.conditionNodes.findIndex(v => v.childNode?.nodeName === curNode.nodeName) p_node.conditionNodes.forEach((v, i) => { if (i === idx) { v.local_status = 'success' } else { v.local_status = 'info' } }) } else { // 普通节点 p_node.local_status = 'success' } } }) } } /*else { // 若没有标红 节点 根据 标绿节点处理额外节点样式 // 处理条件节点 // 处理结束节点 }*/ // 给没有标记 local_status 的 默认填充 未处理 Object.keys(nodeNameObj).forEach(nodeName => { const node = nodeNameObj[nodeName] if (!node.local_status) { node.local_status = 'info' } }) }