config.ts 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. type ModelContentConfig = {
  2. nodeName: string
  3. type: number
  4. local_status?: string // 填充自定义状态
  5. p_nodeNames?: string[] // 填充自定义状态
  6. childNode: ModelContentConfig | null
  7. lastNode_local_status?: string // 结束标记状态标记
  8. conditionNodes?: {
  9. nodeName: string
  10. local_status?: string // 填充自定义状态
  11. conditionList: any[]
  12. childNode: ModelContentConfig
  13. }[]
  14. }
  15. type RenderNodes = {
  16. [key: string]: 0 | 1 // 0已执行 1执行中
  17. }
  18. export const package_modelContentConfig = (data: ModelContentConfig, renderNodes: RenderNodes) => {
  19. /**local_status: 0: 已执行(success) 1:执行中(error) // 默认未执行(info)*/
  20. // 通过nodeName 作为唯一值 记录 每个key(nodeName) 对应的childNode 信息
  21. const nodeNameObj: { [nodeName: string]: ModelContentConfig } = {}
  22. const fn = (data: ModelContentConfig, p_nodeNames = []) => {
  23. // console.error(data, p_nodeNames, 'data, p_nodeNames')
  24. if (!data) return
  25. data.p_nodeNames = p_nodeNames
  26. // 记录
  27. nodeNameObj[data.nodeName] = data
  28. // const _p_nodeNames = [...p_nodeNames, data.nodeName]
  29. const _p_nodeNames = [...p_nodeNames, data.nodeName]
  30. // let has_conditionNodes = false
  31. if (data.conditionNodes && Array.isArray(data.conditionNodes)) {
  32. // has_conditionNodes = true
  33. // 条件分支节点
  34. data.conditionNodes.forEach(v => {
  35. fn(v.childNode, _p_nodeNames)
  36. // fn(v.childNode, [...p_nodeNames])
  37. })
  38. }
  39. if (data.childNode) {
  40. // _p_nodeNames.push(data.nodeName)
  41. // const _p_nodeNames = [...p_nodeNames, data.nodeName]
  42. // if (!has_conditionNodes) {
  43. // _p_nodeNames.push(data.nodeName)
  44. // }
  45. // 正常子节点
  46. fn(data.childNode, _p_nodeNames)
  47. }
  48. }
  49. fn(data)
  50. /*Object.keys(nodeNameObj).forEach(k => {
  51. const _o = nodeNameObj[k]
  52. _o.local_status = 'info'
  53. })
  54. // 给需要修改状态的*/
  55. console.log(nodeNameObj, 'nodeNameObj')
  56. const local_status_obj = {
  57. 0: 'success', // 已执行
  58. 1: 'error' // 执行中
  59. }
  60. let cur_nodeName = ''
  61. /**local_status: 0: 已执行(success) 1:执行中(error) // 默认未执行(info)*/
  62. Object.keys(renderNodes).forEach(nodeName => {
  63. // console.log(nodeName, 'nodeName')
  64. const local_status = local_status_obj[renderNodes[nodeName]] || ''
  65. const node = nodeNameObj[nodeName]
  66. if (node) {
  67. node.local_status = local_status
  68. // 执行中的key 提取出来
  69. if (node.local_status === 'error') {
  70. cur_nodeName = nodeName
  71. }
  72. }
  73. if (nodeName === '结束') {
  74. // 给顶级加结束标签状态
  75. data.lastNode_local_status = local_status_obj[renderNodes[nodeName]]
  76. }
  77. })
  78. /*const cur_actionKey = Object.keys(nodeNameObj).find(nodeName => {
  79. const node = nodeNameObj[nodeName]
  80. // 执行中的key 提取出来
  81. if (node?.local_status === 'error') {
  82. return true
  83. }
  84. })
  85. console.warn(cur_actionKey, '当前标红 cur_actionKey')
  86. */
  87. const curNode = nodeNameObj[cur_nodeName] as ModelContentConfig
  88. console.warn('当前标红 curNode', curNode)
  89. // 如果有执行中的 node 给父级做状态渲染
  90. if (curNode) {
  91. const p_nodeNames = curNode.p_nodeNames || []
  92. if (p_nodeNames.length) {
  93. p_nodeNames.forEach(nodeName => {
  94. const p_node = nodeNameObj[nodeName]
  95. // 父级node 设置为 已执行
  96. // if (!p_node.local_status) {
  97. if (p_node) {
  98. // 如果是条件节点
  99. if (p_node.conditionNodes && Array.isArray(p_node.conditionNodes)) {
  100. const idx = p_node.conditionNodes.findIndex(v => v.childNode?.nodeName === curNode.nodeName)
  101. p_node.conditionNodes.forEach((v, i) => {
  102. if (i === idx) {
  103. v.local_status = 'success'
  104. } else {
  105. v.local_status = 'info'
  106. }
  107. })
  108. } else {
  109. // 普通节点
  110. p_node.local_status = 'success'
  111. }
  112. }
  113. })
  114. }
  115. } /*else {
  116. // 若没有标红 节点 根据 标绿节点处理额外节点样式
  117. // 处理条件节点
  118. // 处理结束节点
  119. }*/
  120. // 给没有标记 local_status 的 默认填充 未处理
  121. Object.keys(nodeNameObj).forEach(nodeName => {
  122. const node = nodeNameObj[nodeName]
  123. if (!node.local_status) {
  124. node.local_status = 'info'
  125. }
  126. })
  127. }