mock平台

common.js 5.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. const moment = require('moment');
  2. const constants = require('./constants/variable');
  3. const Mock = require('mockjs');
  4. const json5 = require('json5');
  5. const MockExtra = require('common/mock-extra.js');
  6. const Roles = {
  7. 0: 'admin',
  8. 10: 'owner',
  9. 20: 'dev',
  10. 30: 'guest',
  11. 40: 'member'
  12. };
  13. const roleAction = {
  14. manageUserlist: 'admin',
  15. changeMemberRole: 'owner',
  16. editInterface: 'dev',
  17. viewPrivateInterface: 'guest',
  18. viewGroup: 'guest'
  19. };
  20. function isJson(json) {
  21. if (!json) {
  22. return false;
  23. }
  24. try {
  25. json = JSON.parse(json);
  26. return json;
  27. } catch (e) {
  28. return false;
  29. }
  30. }
  31. exports.isJson = isJson;
  32. function isJson5(json) {
  33. if (!json) {
  34. return false;
  35. }
  36. try {
  37. json = json5.parse(json);
  38. return json;
  39. } catch (e) {
  40. return false;
  41. }
  42. }
  43. exports.safeArray = function(arr) {
  44. return Array.isArray(arr) ? arr : [];
  45. };
  46. exports.json5_parse = function(json) {
  47. try {
  48. return json5.parse(json);
  49. } catch (err) {
  50. return json;
  51. }
  52. };
  53. exports.json_parse = function(json) {
  54. try {
  55. return JSON.parse(json);
  56. } catch (err) {
  57. return json;
  58. }
  59. };
  60. function deepCopyJson(json) {
  61. return JSON.parse(JSON.stringify(json));
  62. }
  63. exports.deepCopyJson = deepCopyJson;
  64. exports.isJson5 = isJson5;
  65. exports.checkAuth = (action, role) => {
  66. return Roles[roleAction[action]] <= Roles[role];
  67. };
  68. exports.formatTime = timestamp => {
  69. return moment.unix(timestamp).format('YYYY-MM-DD HH:mm:ss');
  70. };
  71. // 防抖函数,减少高频触发的函数执行的频率
  72. // 请在 constructor 里使用:
  73. // import { debounce } from '$/common';
  74. // this.func = debounce(this.func, 400);
  75. exports.debounce = (func, wait) => {
  76. let timeout;
  77. return function() {
  78. clearTimeout(timeout);
  79. timeout = setTimeout(func, wait);
  80. };
  81. };
  82. // 从 Javascript 对象中选取随机属性
  83. exports.pickRandomProperty = obj => {
  84. let result;
  85. let count = 0;
  86. for (let prop in obj) {
  87. if (Math.random() < 1 / ++count) {
  88. result = prop;
  89. }
  90. }
  91. return result;
  92. };
  93. exports.getImgPath = (path, type) => {
  94. let rate = window.devicePixelRatio >= 2 ? 2 : 1;
  95. return `${path}@${rate}x.${type}`;
  96. };
  97. function trim(str) {
  98. if (!str) {
  99. return str;
  100. }
  101. str = str + '';
  102. return str.replace(/(^\s*)|(\s*$)/g, '');
  103. }
  104. exports.trim = trim;
  105. exports.handlePath = path => {
  106. path = trim(path);
  107. if (!path) {
  108. return path;
  109. }
  110. if (path === '/') {
  111. return '';
  112. }
  113. path = path[0] !== '/' ? '/' + path : path;
  114. path = path[path.length - 1] === '/' ? path.substr(0, path.length - 1) : path;
  115. return path;
  116. };
  117. exports.handleApiPath = path => {
  118. if (!path) {
  119. return '';
  120. }
  121. path = trim(path);
  122. path = path[0] !== '/' ? '/' + path : path;
  123. return path;
  124. };
  125. // 名称限制 constants.NAME_LIMIT 字符
  126. exports.nameLengthLimit = type => {
  127. // 返回字符串长度,汉字计数为2
  128. const strLength = str => {
  129. let length = 0;
  130. for (let i = 0; i < str.length; i++) {
  131. str.charCodeAt(i) > 255 ? (length += 2) : length++;
  132. }
  133. return length;
  134. };
  135. // 返回 form中的 rules 校验规则
  136. return [
  137. {
  138. required: true,
  139. validator(rule, value, callback) {
  140. const len = value ? strLength(value) : 0;
  141. if (len > constants.NAME_LIMIT) {
  142. callback(
  143. '请输入' + type + '名称,长度不超过' + constants.NAME_LIMIT + '字符(中文算作2字符)!'
  144. );
  145. } else if (len === 0) {
  146. callback(
  147. '请输入' + type + '名称,长度不超过' + constants.NAME_LIMIT + '字符(中文算作2字符)!'
  148. );
  149. } else {
  150. return callback();
  151. }
  152. }
  153. }
  154. ];
  155. };
  156. // 去除所有html标签只保留文字
  157. exports.htmlFilter = html => {
  158. let reg = /<\/?.+?\/?>/g;
  159. return html.replace(reg, '') || '新项目';
  160. };
  161. // 实现 Object.entries() 方法
  162. exports.entries = obj => {
  163. let res = [];
  164. for (let key in obj) {
  165. res.push([key, obj[key]]);
  166. }
  167. return res;
  168. };
  169. exports.getMockText = mockTpl => {
  170. try {
  171. return JSON.stringify(Mock.mock(MockExtra(json5.parse(mockTpl), {})), null, ' ');
  172. } catch (err) {
  173. return '';
  174. }
  175. };
  176. /**
  177. * 合并后新的对象属性与 Obj 一致,nextObj 有对应属性则取 nextObj 属性值,否则取 Obj 属性值
  178. * @param {Object} Obj 旧对象
  179. * @param {Object} nextObj 新对象
  180. * @return {Object} 合并后的对象
  181. */
  182. exports.safeAssign = (Obj, nextObj) => {
  183. let keys = Object.keys(nextObj);
  184. return Object.keys(Obj).reduce((result, value) => {
  185. if (keys.indexOf(value) >= 0) {
  186. result[value] = nextObj[value];
  187. } else {
  188. result[value] = Obj[value];
  189. }
  190. return result;
  191. }, {});
  192. };
  193. // 交换数组的位置
  194. exports.arrayChangeIndex = (arr, start, end) => {
  195. let newArr = [].concat(arr);
  196. // newArr[start] = arr[end];
  197. // newArr[end] = arr[start];
  198. let startItem = newArr[start];
  199. newArr.splice(start, 1);
  200. // end自动加1
  201. newArr.splice(end, 0, startItem);
  202. let changes = [];
  203. newArr.forEach((item, index) => {
  204. changes.push({
  205. id: item._id,
  206. index: index
  207. });
  208. });
  209. return changes;
  210. };