rule-funcs.js 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. const ruleToFuncString = (rule) => {
  2. const condition = rule.options?.isCondition ? ` if (${rule.options.condition || 'false'}) ` : ''
  3. if (rule.action == 'hide') {
  4. return `${condition} this.hide(${JSON.stringify(rule.options.fields)});`
  5. }
  6. if (rule.action == 'display') {
  7. return `${condition} this.display(${JSON.stringify(rule.options.fields)});`
  8. }
  9. if (rule.action == 'disabled') {
  10. return `${condition} this.disabled(${JSON.stringify(rule.options.fields)}, ${rule.options.disabled});`
  11. }
  12. if (rule.action == 'refresh') {
  13. return `${condition} await this.refresh();`
  14. }
  15. if (rule.action == 'reset') {
  16. return `${condition} this.reset();`
  17. }
  18. if (rule.action == 'setData') {
  19. const setField = rule.options.fields.map(item => {
  20. if (rule.options.valueTypes[item] == 'fx') {
  21. return `'${item}' : ${rule.options.values[item] || JSON.stringify('')}`
  22. } else if (rule.options.valueTypes[item] == 'boolean') {
  23. return `'${item}' : ${rule.options.values[item] ?? false}`
  24. } else if (rule.options.valueTypes[item] == 'number') {
  25. return `'${item}' : ${rule.options.values[item] || (typeof rule.options.values[item] === 'number' ? 0 : undefined)}`
  26. } else {
  27. return `'${item}' : ${JSON.stringify(rule.options.values[item] ?? '')}`
  28. }
  29. })
  30. return `${condition} await this.setData({${setField.join(',')}});`
  31. }
  32. if (rule.action == 'validate') {
  33. if (rule.options.failSuspend) {
  34. return `${condition} await this.validate(${JSON.stringify(rule.options.fields)});`
  35. } else {
  36. return `${condition} this.validate(${JSON.stringify(rule.options.fields)});`
  37. }
  38. }
  39. if (rule.action == 'sendRequest') {
  40. if (!rule.options.dataSource) return ''
  41. let argsArray = Object.keys(rule.options.dataSource.args).map(argKey => {
  42. if (rule.options.valueTypes[argKey] == 'fx') {
  43. return `'${argKey}' : ${rule.options.dataSource.args[argKey] || JSON.stringify('')}`
  44. } else if (rule.options.valueTypes[argKey] == 'boolean') {
  45. return `'${argKey}' : ${rule.options.dataSource.args[argKey]}`
  46. } else if (rule.options.valueTypes[argKey] == 'number') {
  47. return `'${argKey}' : ${rule.options.dataSource.args[argKey] || (typeof rule.options.values[item] === 'number' ? 0 : undefined)}`
  48. } else {
  49. return `'${argKey}' : ${JSON.stringify(rule.options.dataSource.args[argKey] ?? '')}`
  50. }
  51. })
  52. if (rule.options.responseVariable) {
  53. let responseStatement = ` let ${rule.options.responseVariable} = undefined;`
  54. return `${responseStatement} ${condition} ${rule.options.responseVariable} = await this.sendRequest('${rule.options.dataSource.value}', {${argsArray.join(',')}});`
  55. } else {
  56. return `${condition} await this.sendRequest('${rule.options.dataSource.value}', {${argsArray.join(',')}});`
  57. }
  58. }
  59. if (rule.action == 'refreshFieldDataSource') {
  60. if (!rule.options.field) return ''
  61. let argsArray = Object.keys(rule.options.dataSource.args).map(argKey => {
  62. if (rule.options.valueTypes[argKey] == 'fx') {
  63. return `'${argKey}' : ${rule.options.dataSource.args[argKey] || JSON.stringify('')}`
  64. } else if (rule.options.valueTypes[argKey] == 'boolean') {
  65. return `'${argKey}' : ${rule.options.dataSource.args[argKey]}`
  66. } else if (rule.options.valueTypes[argKey] == 'number') {
  67. return `'${argKey}' : ${rule.options.dataSource.args[argKey] || (typeof rule.options.values[item] === 'number' ? 0 : undefined)}`
  68. } else {
  69. return `'${argKey}' : ${JSON.stringify(rule.options.dataSource.args[argKey] ?? '')}`
  70. }
  71. })
  72. return `${condition} await this.refreshFieldDataSource('${rule.options.field}', {${argsArray.join(',')}});`
  73. }
  74. if (rule.action == 'getFieldDataSource') {
  75. if (rule.options.localVariable) {
  76. let localStatement = ` let ${rule.options.localVariable} = undefined;`
  77. return `${localStatement} ${condition} ${rule.options.localVariable} = this.getFieldDataSource('${rule.options.field}');`
  78. }
  79. }
  80. if (rule.action == 'getOptionData') {
  81. if (rule.options.localVariable) {
  82. let localStatement = ` let ${rule.options.localVariable} = undefined;`
  83. return `${localStatement} ${condition} ${rule.options.localVariable} = this.getOptionData('${rule.options.field}');`
  84. }
  85. }
  86. if (rule.action == 'refreshDynamicValueAll') {
  87. return `${condition} this.refreshDynamicValueAll()`
  88. }
  89. if (rule.action == 'refreshDynamicValue') {
  90. if (!rule.options.field) return ''
  91. let argsArray = []
  92. if (rule.options.isArgs) {
  93. argsArray = Object.keys(rule.options.dataSource.args).map(argKey => {
  94. if (rule.options.valueTypes[argKey] == 'fx') {
  95. return `'${argKey}' : ${rule.options.dataSource.args[argKey] || JSON.stringify('')}`
  96. } else if (rule.options.valueTypes[argKey] == 'boolean') {
  97. return `'${argKey}' : ${rule.options.dataSource.args[argKey]}`
  98. } else if (rule.options.valueTypes[argKey] == 'number') {
  99. return `'${argKey}' : ${rule.options.dataSource.args[argKey] || (typeof rule.options.values[item] === 'number' ? 0 : undefined)}`
  100. } else {
  101. return `'${argKey}' : ${JSON.stringify(rule.options.dataSource.args[argKey] ?? '')}`
  102. }
  103. })
  104. }
  105. return `${condition} this.refreshDynamicValue('${rule.options.field}', {${argsArray.join(',')}});`
  106. }
  107. if (rule.action == 'refreshFieldOptionData') {
  108. if (!rule.options.field) return ''
  109. let argsArray = []
  110. if (rule.options.isArgs) {
  111. argsArray = Object.keys(rule.options.dataSource.args).map(argKey => {
  112. if (rule.options.valueTypes[argKey] == 'fx') {
  113. return `'${argKey}' : ${rule.options.dataSource.args[argKey] || JSON.stringify('')}`
  114. } else if (rule.options.valueTypes[argKey] == 'boolean') {
  115. return `'${argKey}' : ${rule.options.dataSource.args[argKey]}`
  116. } else if (rule.options.valueTypes[argKey] == 'number') {
  117. return `'${argKey}' : ${rule.options.dataSource.args[argKey] || (typeof rule.options.values[item] === 'number' ? 0 : undefined)}`
  118. } else {
  119. return `'${argKey}' : ${JSON.stringify(rule.options.dataSource.args[argKey] ?? '')}`
  120. }
  121. })
  122. }
  123. return `${condition} this.refreshFieldOptionData('${rule.options.field}', {${argsArray.join(',')}});`
  124. }
  125. if (rule.action == 'openDialog') {
  126. if (!rule.options.field) return ''
  127. return `${condition} this.openDialog('${rule.options.field}');`
  128. }
  129. if (rule.action == 'closeDialog') {
  130. if (!rule.options.field) return ''
  131. return `${condition} this.closeDialog('${rule.options.field}');`
  132. }
  133. if (rule.action == 'triggerEvent') {
  134. if (!rule.options.functionName) return ''
  135. let params = rule.options.functionParams.trim()
  136. if (params) {
  137. try{
  138. params = new Function('return ' + params)()
  139. } catch (error) {
  140. return `${condition} this.triggerEvent('${rule.options.functionName}', "${params}");`
  141. }
  142. return `${condition} this.triggerEvent('${rule.options.functionName}', ${JSON.stringify(params)});`
  143. } else {
  144. return `${condition} this.triggerEvent('${rule.options.functionName}');`
  145. }
  146. }
  147. if (rule.action == 'js') {
  148. return rule.options.func
  149. }
  150. }
  151. const ruleToFunction = (rules) => {
  152. if (!rules) return ''
  153. if (typeof rules == 'string') {
  154. rules = JSON.parse(rules)
  155. }
  156. let funcs = []
  157. rules.forEach(item => {
  158. funcs.push(ruleToFuncString(item))
  159. })
  160. return funcs.join('\n')
  161. }
  162. export {
  163. ruleToFunction
  164. }