validator.js 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import { reactive } from 'vue'
  2. export const createValidator = () => {
  3. let validator = new Object()
  4. validator.nodeRules = new Map()
  5. validator.results = reactive(new Map())
  6. // 注册节点验证规则
  7. validator.register = (nodeId, validatorFun) => {
  8. if (validatorFun && validatorFun instanceof Function) {
  9. validator.nodeRules.set(nodeId, validatorFun)
  10. }
  11. }
  12. // 移除节点验证规则
  13. validator.remove = (nodeId) => {
  14. validator.nodeRules.delete(nodeId)
  15. validator.results.delete(nodeId)
  16. }
  17. // 验证节点
  18. validator.validate = () => {
  19. let valid = true
  20. let messages = []
  21. validator.nodeRules.forEach((value, key) => {
  22. let fun = value
  23. if (fun && fun instanceof Function) {
  24. let result = fun()
  25. if (!result.valid) {
  26. valid = false
  27. validator.results.set(key, result)
  28. messages.push(result.message)
  29. } else {
  30. validator.results.delete(key)
  31. }
  32. }
  33. })
  34. return { valid, messages }
  35. }
  36. // 获取指定节点的结果
  37. validator.getResult = (nodeId) => {
  38. let result = validator.results.get(nodeId)
  39. if (result) {
  40. return result
  41. }
  42. }
  43. return validator
  44. }