rule-funcs.js 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  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]}`
  22. } else {
  23. return `'${item}' : ${typeof rule.options.values[item] == 'string' ? JSON.stringify(rule.options.values[item]) : rule.options.values[item]}`
  24. }
  25. })
  26. return `${condition} await this.setData({${setField.join(',')}});`
  27. }
  28. if (rule.action == 'validate') {
  29. if (rule.options.failSuspend) {
  30. return `${condition} await this.validate(${JSON.stringify(rule.options.fields)});`
  31. } else {
  32. return `${condition} this.validate(${JSON.stringify(rule.options.fields)});`
  33. }
  34. }
  35. if (rule.action == 'sendRequest') {
  36. if (!rule.options.dataSource) return ''
  37. let argsArray = Object.keys(rule.options.dataSource.args).map(argKey => {
  38. if (rule.options.valueTypes[argKey] == 'fx') {
  39. return `'${argKey}': ${rule.options.dataSource.args[argKey]}`
  40. } else {
  41. return `'${argKey}': ${typeof rule.options.dataSource.args[argKey] == 'string' ? JSON.stringify(rule.options.dataSource.args[argKey]) : rule.options.dataSource.args[argKey]}`
  42. }
  43. })
  44. if (rule.options.responseVariable) {
  45. let responseStatement = ` let ${rule.options.responseVariable} = undefined;`
  46. return `${responseStatement} ${condition} ${rule.options.responseVariable} = await this.sendRequest('${rule.options.dataSource.label}', {${argsArray.join(',')}});`
  47. } else {
  48. return `${condition} await this.sendRequest('${rule.options.dataSource.label}', {${argsArray.join(',')}});`
  49. }
  50. }
  51. if (rule.action == 'refreshFieldDataSource') {
  52. if (!rule.options.field) return ''
  53. let argsArray = Object.keys(rule.options.dataSource.args).map(argKey => {
  54. if (rule.options.valueTypes[argKey] == 'fx') {
  55. return `'${argKey}': ${rule.options.dataSource.args[argKey]}`
  56. } else {
  57. return `'${argKey}': ${typeof rule.options.dataSource.args[argKey] == 'string' ? JSON.stringify(rule.options.dataSource.args[argKey]) : rule.options.dataSource.args[argKey]}`
  58. }
  59. })
  60. return `${condition} await this.refreshFieldDataSource('${rule.options.field}', {${argsArray.join(',')}});`
  61. }
  62. if (rule.action == 'getFieldDataSource') {
  63. if (rule.options.localVariable) {
  64. let localStatement = ` let ${rule.options.localVariable} = undefined;`
  65. return `${localStatement} ${condition} ${rule.options.localVariable} = this.getFieldDataSource('${rule.options.field}');`
  66. }
  67. }
  68. if (rule.action == 'getOptionData') {
  69. if (rule.options.localVariable) {
  70. let localStatement = ` let ${rule.options.localVariable} = undefined;`
  71. return `${localStatement} ${condition} ${rule.options.localVariable} = this.getOptionData('${rule.options.field}');`
  72. }
  73. }
  74. if (rule.action == 'refreshDynamicValueAll') {
  75. return `${condition} this.refreshDynamicValueAll()`
  76. }
  77. if (rule.action == 'refreshDynamicValue') {
  78. if (!rule.options.field) return ''
  79. let argsArray = []
  80. if (rule.options.isArgs) {
  81. argsArray = Object.keys(rule.options.dataSource.args).map(argKey => {
  82. if (rule.options.valueTypes[argKey] == 'fx') {
  83. return `'${argKey}': ${rule.options.dataSource.args[argKey]}`
  84. } else {
  85. return `'${argKey}': ${typeof rule.options.dataSource.args[argKey] == 'string' ? JSON.stringify(rule.options.dataSource.args[argKey]) : rule.options.dataSource.args[argKey]}`
  86. }
  87. })
  88. }
  89. return `${condition} this.refreshDynamicValue('${rule.options.field}', {${argsArray.join(',')}});`
  90. }
  91. if (rule.action == 'refreshFieldOptionData') {
  92. if (!rule.options.field) return ''
  93. let argsArray = []
  94. if (rule.options.isArgs) {
  95. argsArray = Object.keys(rule.options.dataSource.args).map(argKey => {
  96. if (rule.options.valueTypes[argKey] == 'fx') {
  97. return `'${argKey}': ${rule.options.dataSource.args[argKey]}`
  98. } else {
  99. return `'${argKey}': ${typeof rule.options.dataSource.args[argKey] == 'string' ? JSON.stringify(rule.options.dataSource.args[argKey]) : rule.options.dataSource.args[argKey]}`
  100. }
  101. })
  102. }
  103. return `${condition} this.refreshFieldOptionData('${rule.options.field}', {${argsArray.join(',')}});`
  104. }
  105. if (rule.action == 'openDialog') {
  106. if (!rule.options.field) return ''
  107. return `${condition} this.openDialog('${rule.options.field}');`
  108. }
  109. if (rule.action == 'closeDialog') {
  110. if (!rule.options.field) return ''
  111. return `${condition} this.closeDialog('${rule.options.field}');`
  112. }
  113. if (rule.action == 'triggerEvent') {
  114. if (!rule.options.functionName) return ''
  115. let params = rule.options.functionParams.trim()
  116. if (params) {
  117. try{
  118. params = new Function('return ' + params)()
  119. } catch (error) {
  120. return `${condition} this.triggerEvent('${rule.options.functionName}', "${params}");`
  121. }
  122. return `${condition} this.triggerEvent('${rule.options.functionName}', ${JSON.stringify(params)});`
  123. } else {
  124. return `${condition} this.triggerEvent('${rule.options.functionName}');`
  125. }
  126. }
  127. if (rule.action == 'js') {
  128. return rule.options.func
  129. }
  130. }
  131. const ruleToFunction = (rules) => {
  132. if (!rules) return ''
  133. if (typeof rules == 'string') {
  134. rules = JSON.parse(rules)
  135. }
  136. let funcs = []
  137. rules.forEach(item => {
  138. funcs.push(ruleToFuncString(item))
  139. })
  140. return funcs.join('\n')
  141. }
  142. export {
  143. ruleToFunction
  144. }