layout-clone.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. import _ from 'lodash'
  2. export const CloneLayout = (data) => {
  3. if (data.type === 'grid') {
  4. let key = Math.random().toString(36).slice(-8)
  5. return {
  6. ...data,
  7. key,
  8. model: data.type + '_' + key,
  9. columns: data.columns.map (item => {
  10. return {
  11. ...item,
  12. list: item.list.map(colItem => {
  13. return CloneLayout(colItem)
  14. }),
  15. key: Math.random().toString(36).slice(-8)
  16. }
  17. })
  18. }
  19. } else if (data.type === 'col') {
  20. let key = Math.random().toString(36).slice(-8)
  21. return {
  22. ...data,
  23. key,
  24. list: data.list.map(item => {
  25. return CloneLayout(item)
  26. })
  27. }
  28. } else if (data.type === 'tabs' || data.type === 'collapse') {
  29. let key = Math.random().toString(36).slice(-8)
  30. return {
  31. ...data,
  32. key,
  33. model: data.type + '_' + key,
  34. tabs: data.tabs.map (item => {
  35. return {
  36. ...item,
  37. list: item.list.map (tabItem => {
  38. return CloneLayout(tabItem)
  39. })
  40. }
  41. })
  42. }
  43. } else if (data.type === 'table') {
  44. let key = Math.random().toString(36).slice(-8)
  45. return {
  46. ...data,
  47. key,
  48. model: data.type + '_' + key,
  49. tableColumns: data.tableColumns.map (item => {
  50. return CloneLayout(item)
  51. })
  52. }
  53. } else if (data.type === 'subform') {
  54. let key = Math.random().toString(36).slice(-8)
  55. return {
  56. ...data,
  57. key,
  58. model: data.type + '_' + key,
  59. list: data.list.map (item => {
  60. return CloneLayout(item)
  61. })
  62. }
  63. } else if (data.type === 'report') {
  64. let key = Math.random().toString(36).slice(-8)
  65. return {
  66. ...data,
  67. key,
  68. model: data.type + '_' + key,
  69. rows: data.rows.map(r => {
  70. return {
  71. ...r,
  72. columns: r.columns.map(c => {
  73. return {
  74. ...c,
  75. list: c.list.map(cItem => {
  76. return CloneLayout(cItem)
  77. }),
  78. key: Math.random().toString(36).slice(-8)
  79. }
  80. })
  81. }
  82. })
  83. }
  84. } else if (data.type === 'inline') {
  85. let key = Math.random().toString(36).slice(-8)
  86. return {
  87. ...data,
  88. key,
  89. model: data.type + '_' + key,
  90. list: data.list.map(item => {
  91. return CloneLayout(item)
  92. })
  93. }
  94. } else if (data.type === 'dialog') {
  95. let key = Math.random().toString(36).slice(-8)
  96. return {
  97. ...data,
  98. key,
  99. model: data.type + '_' + key,
  100. list: data.list.map(item => {
  101. return CloneLayout(item)
  102. })
  103. }
  104. } else if (data.type === 'card') {
  105. let key = Math.random().toString(36).slice(-8)
  106. return {
  107. ...data,
  108. key,
  109. model: data.type + '_' + key,
  110. list: data.list.map(item => {
  111. return CloneLayout(item)
  112. })
  113. }
  114. } else if (data.type === 'group') {
  115. let key = Math.random().toString(36).slice(-8)
  116. return {
  117. ...data,
  118. key,
  119. model: data.type + '_' + key,
  120. list: data.list.map(item => {
  121. return CloneLayout(item)
  122. })
  123. }
  124. } else {
  125. let key = Math.random().toString(36).slice(-8)
  126. return {
  127. ...data,
  128. key,
  129. model: data.type + '_' + key,
  130. }
  131. }
  132. }