utils.ts 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. import { DataTypeStringEnum } from '@/consts';
  2. export const formatValue = (value: string, type: string, operator: string) => {
  3. let conditionValue: string = ''; //
  4. switch (type) {
  5. case DataTypeStringEnum.VarChar:
  6. switch (operator) {
  7. case 'in':
  8. case 'not in':
  9. conditionValue = `${value}`;
  10. break;
  11. default:
  12. conditionValue = `"${value}"`;
  13. break;
  14. }
  15. break;
  16. case DataTypeStringEnum.JSON:
  17. switch (operator) {
  18. case '<':
  19. case '>':
  20. case '==':
  21. case '>=':
  22. case '<=':
  23. conditionValue = value;
  24. break;
  25. case 'in':
  26. case 'not in':
  27. conditionValue = `[${value}]`;
  28. break;
  29. case 'JSON_CONTAINS':
  30. case 'ARRAY_CONTAINS':
  31. conditionValue = `${value}`;
  32. break;
  33. default:
  34. conditionValue = `"${value}"`;
  35. break;
  36. }
  37. break;
  38. default:
  39. conditionValue = value;
  40. }
  41. return conditionValue;
  42. };
  43. export const checkValue = (data: any): boolean => {
  44. let isLegal = false;
  45. const regInt = /^-?\d+$/;
  46. const regFloat = /^-?\d+\.\d+$/;
  47. const regIntInterval = /^\[-?\d+(,-?\d+)*\]$/;
  48. const regFloatInterval = /^\[-?\d+\.\d+(,-?\d+\.\d+)*\]$/;
  49. const isIn = data.operator === 'in' || data.operator === 'not in';
  50. switch (data.type) {
  51. case DataTypeStringEnum.Int8:
  52. case DataTypeStringEnum.Int16:
  53. case DataTypeStringEnum.Int32:
  54. case DataTypeStringEnum.Int64:
  55. // case DataTypeStringEnum:
  56. isLegal = isIn
  57. ? regIntInterval.test(data.value)
  58. : regInt.test(data.value);
  59. break;
  60. case DataTypeStringEnum.Float:
  61. case DataTypeStringEnum.Double:
  62. case DataTypeStringEnum.FloatVector:
  63. isLegal = isIn
  64. ? regFloatInterval.test(data.value)
  65. : regFloat.test(data.value);
  66. break;
  67. case DataTypeStringEnum.Bool:
  68. const legalValues = ['false', 'true'];
  69. isLegal = legalValues.includes(data.value);
  70. break;
  71. case DataTypeStringEnum.VarChar:
  72. isLegal = data.value !== '';
  73. break;
  74. case DataTypeStringEnum.JSON:
  75. let type = DataTypeStringEnum.VarChar;
  76. switch (data.operator) {
  77. case '>':
  78. case '<':
  79. case '>=':
  80. case '<=':
  81. type = DataTypeStringEnum.Int64;
  82. }
  83. isLegal = checkValue({
  84. value: data.value,
  85. type: type,
  86. operator: data.operator,
  87. });
  88. break;
  89. case DataTypeStringEnum.Array:
  90. isLegal = data.value !== '';
  91. break;
  92. default:
  93. isLegal = false;
  94. break;
  95. }
  96. return isLegal;
  97. };