config.ts 3.2 KB

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