mock.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. import mockjs from 'mockjs';
  2. const Random = mockjs.Random;
  3. export default (column, dic) => {
  4. let form = {};
  5. function createName({ en }) {
  6. if (en) {
  7. return Random.name(true);
  8. }
  9. return Random.cname();
  10. }
  11. function createNumber({ max, min, precision }) {
  12. if (precision) {
  13. const number = Random.float(min, max, precision) + '';
  14. const index = number.indexOf('.') + 1;
  15. return Number(number.substring(0, index + precision));
  16. } else {
  17. return Random.integer(min, max)
  18. }
  19. }
  20. function createUrl({ header, footer }) {
  21. let url = Random.url();
  22. const index = url.indexOf('://');
  23. if (header === false) {
  24. url = url.substring(index + 3);
  25. } else {
  26. url = 'http://' + url.substring(index + 3);
  27. }
  28. return url;
  29. }
  30. function createDatetime({ format, now }) {
  31. if (now) {
  32. return Random.now(format)
  33. }
  34. return Random.datetime(format)
  35. }
  36. function createText({ min, max }) {
  37. return Random.csentence(min, max)
  38. }
  39. function createCounty() {
  40. return Random.county(true);
  41. }
  42. function createDic({ dic, props, columnType, multiple }) {
  43. const value = props.value || 'value';
  44. const len = dic.length;
  45. if (['checkbox'].includes(columnType) || multiple) {
  46. const number = createNumber({
  47. min: 1,
  48. max: len
  49. });
  50. let result = [];
  51. for (let i = 0; i < number; i++) {
  52. let flag = true;
  53. while (flag) {
  54. const numbers = createNumber({
  55. min: 0,
  56. max: len - 1
  57. });
  58. const values = dic[numbers][value];
  59. if (!result.includes(values)) {
  60. result.push(values);
  61. flag = false;
  62. }
  63. }
  64. }
  65. return result;
  66. } else {
  67. const number = createNumber({
  68. min: 0,
  69. max: len - 1
  70. });
  71. return dic[number][value];
  72. }
  73. }
  74. function create() {
  75. Object.keys(column).forEach(index => {
  76. const ele = column[index];
  77. if (ele.mock && typeof ele.mock === 'object') {
  78. let params = ele.mock;
  79. params.dic = typeof ele.dicData === 'string' ? dic[ele.dicData] : (ele.dicData || []);
  80. params.props = ele.props || {};
  81. params.columnType = ele.type;
  82. params.multiple = ele.multiple;
  83. switch (params.type) {
  84. case 'name':
  85. form[ele.prop] = createName(params);
  86. break;
  87. case 'number':
  88. form[ele.prop] = createNumber(params);
  89. break;
  90. case 'datetime':
  91. form[ele.prop] = createDatetime(params);
  92. break;
  93. case 'word':
  94. form[ele.prop] = createText(params);
  95. break;
  96. case 'url':
  97. form[ele.prop] = createUrl(params);
  98. break;
  99. case 'county':
  100. form[ele.prop] = createCounty(params);
  101. break;
  102. case 'dic':
  103. form[ele.prop] = createDic(params);
  104. break;
  105. }
  106. }
  107. })
  108. }
  109. create();
  110. return form;
  111. }